栈的进栈、退栈、读栈顶元素、判空判满和初始化等操作C语言数据结构(注释详细)

用C语言定义栈,分别用函数实现下列功能:
{

  1. 初始化栈;
  2. 进栈运算:实现元素的进栈运算;
  3. 退栈运算:实现元素的退栈运算;
  4. 读栈顶元素运算;
  5. 栈的判空判满运算:判断一个栈是空还是满;

}
正在学c语言数据结构的同学最好不要照搬,通过注释自己摸索写出属于自己的代码才是最重要的。

话不多说,直接上代码:

#include<stdio.h>
#define stack_size 10//定义栈空间的大小

/********************定义栈**************************/
struct stack{
    
    
	int data[stack_size];//用于保存栈的数据
	int top;//用于保存栈顶位置,在空栈时位置top为-1
};

/********************初始化栈*********************/
void initstack(struct stack* stack){
    
    
	stack->top = -1;
}

/********************判断栈是否为空*******************/
int judgeempty(struct stack* stack){
    
    
	return(stack->top == -1) ? 1 : 0;//三目运算符,如果top指针为-1则返回1,否则返回0
}
/********************判断栈是否已满*******************/
int judgefull(struct stack* stack){
    
    
	return(stack->top == stack_size - 1) ? 1 : 0;//三目运算符,如果top指针为栈空间最大值-1则返回1,否则返回0
}

/********************入栈**************************/
int insert(struct stack* stack,int value){
    
    
	void output(struct stack* stack);
	if (judgefull(stack)){
    
    //如果返回值为1,则栈已满,执行返回操作,反之则执行下一步操作
		printf("栈空间已满,请使用出栈操作以释放空间\n");
		return 0;
	}
	stack->data[++stack->top] = value;
	return 1;
}
/********************出栈**************************/
int delestack(struct stack* stack){
    
    
	if (judgeempty(stack)){
    
    //如果返回值为1,则栈空,执行返回操作,反之则执行下一步操作
		printf("栈内数据为空,请先入栈\n!");
		return 0;
	}
	--stack->top;
	return 1;
}

/********************读栈顶元素运算******************/
int gettop(struct stack* stack){
    
    
	int value;
	if (judgeempty(stack)){
    
    
		printf("栈内数据为空,请先入栈\n!");
	}
	value = stack->data[stack->top];
	return value;
}

/*****************输出栈内的全部数据***************/
void output(struct stack* stack){
    
    
	int i;
	if (judgeempty(stack)){
    
    
		printf("栈内数据为空,请先入栈\n!");
		return;
	}
	printf("当前栈内的所有数据如下:\n");
	for (i = stack->top; i > -1; i--){
    
    
		printf("\t|%d|\n", stack->data[i]);
	}
	system("pause");
	system("cls");
}

/********************主测试程序********************/
int main()
{
    
    
	int num,data,i;
	struct stack stack;//初始化栈
	initstack(&stack);
A:	while (1)
	{
    
    
		printf("\t提示:系统已自动初始化栈\n\n");
		printf("\t\t1.进栈运算\n\n");
		printf("\t\t2.退栈运算\n\n");
		printf("\t\t3.读栈顶元素运算\n\n");
		printf("\t\t4.输出栈中全部数据\n\n");
		printf("\t\t5.退出程序\n\n");
		printf("请选择功能项,并按回车执行:");
		scanf_s("%d", &num);
		switch (num)
		{
    
    
		case 1:	//进栈运算
		{
    
    
			printf("请输入要进栈的数据个数:\n");
			scanf_s("%d", &num);
			printf("请输入要插入的数据(用空格分开):");
			for (i = 0; i < num; i++){
    
    
				scanf_s("%d", &data);
				insert(&stack, data);
			}
			printf("插入成功!\n");
			output(&stack);
			goto A;
		}
		case 2://删除节点
		{
    
    
			printf("请输入你要删除的节点数:\n");
			scanf_s("%d", &data);
			for (i = data; i > 0;i--)
			delestack(&stack);
			printf("删除成功!\n");
			output(&stack);
			goto A;
		}
		case 3://读取栈顶操作
		{
    
    
			data=gettop(&stack);
			printf("栈顶元素为:%d\n",data);
			system("pause");
			system("cls");
			goto A;
		}
		case 4://输出栈中全部数据
		{
    
    
			output(&stack);
			goto A;
		}
		case 5://退出程序
		{
    
    
			system("cls");
			printf("******************>>>>退出成功!");
			return;
		}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_33522195/article/details/117877509