栈的进栈、退栈、读栈顶元素、判空判满和初始化等操作C语言数据结构(注释详细)
用C语言定义栈,分别用函数实现下列功能:
{
- 初始化栈;
- 进栈运算:实现元素的进栈运算;
- 退栈运算:实现元素的退栈运算;
- 读栈顶元素运算;
- 栈的判空判满运算:判断一个栈是空还是满;
}
正在学c语言数据结构的同学最好不要照搬,通过注释自己摸索写出属于自己的代码才是最重要的。
话不多说,直接上代码:
#include
#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;}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
