数据结构用c语言描述

实验目的:熟练掌握栈和队列的特点;掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用;掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用,掌握环形队列的入队和出队等基本操作;加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力。

实验内容:定义顺序栈,完成栈的基本操作:空栈、入栈、出栈、取栈顶元素;实现十进制数与八进制数的转换,十进制数与十六进制数的转换和任意进制之间的转换;定义链式队列,完成队列的基本操作:入队和出队。

/*
	十进制到其它进制的转换
*/
 
 
# include <stdio.h>
# include <malloc.h>
 
# define N 8  //要转换成的进制
# define INIT_SIZE 5  //栈的初始空间大小
# define INC_SIZE 2  //栈空间增量
 
 
//栈结构
typedef struct
{
	int * base;  //指向栈底,也是栈空间的地址
	int * top;  //始终指向有效元素的上一个位置
	int initsize;   //栈的初始空间大小
}Stack;
 
void convert(int num);  //进制转换
void inital_stack(Stack &s);   //初始化栈
void push(Stack &s, int m);  //元素入栈
void pop(Stack &s, int * val);  //元素出栈
 
int main(void)
{
	int num;
	printf("请输入一个十进制数 num = ");
	scanf("%d", &num);
 
	convert(num);
 
	return 0;
}
 
//进制换换
void convert(int num)
{
	int m;  //记录余数
	int val;  //保存出栈元素
 
	Stack s;
	inital_stack(s);
 
	while(0 != num)  //当商为0时结束
	{
		m = num % N;  //取模
		push(s, m);
 
		num = num / N;
	}
 
	printf("转换成%d进制为:", N);
	while(s.top != s.base)
	{
		pop(s, &val);
		printf("%d", val);
	}
	printf("\n");
}
 
//初始化栈
void inital_stack(Stack &s)
{
	s.initsize = INIT_SIZE;
	s.base = (int *)malloc(sizeof(int) * INIT_SIZE);
	s.top = s.base;
}
 
//元素m入栈
void push(Stack &s, int m)
{
	//判断栈是否满,满则增加栈的容量
	if((s.top - s.base) >= s.initsize)
	{
		s.base = (int *)realloc(s.base, sizeof(int) * s.initsize + INC_SIZE);
		s.initsize = s.initsize + INC_SIZE;
	}
 
	*(s.top) = m;
 
	s.top ++;
}
 
//元素出栈
void pop(Stack &s, int * val)
{
	s.top --;
	 *val =	*(s.top);
}

 

堆栈特点先进后出,队列特点先进先出,

代码较多,建议参考

C语言堆栈:https://blog.csdn.net/AntonioZC666/article/details/106288815/

C语言队列:https://blog.csdn.net/qq_42338808/article/details/83247086

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m