一.实验目的:
掌握栈在顺序存储结构上的插入和删除运算。
二. 实验要求:
1. 给出程序设计的基本思想、原理和算法描述。
2. 画出程序流程图;根据数据结构有关知识编出算法程序;
3. 源程序给出注释。
4. 保存和打印出程序的运行结果,并结合程序进行分析。
三.实验内容:
1.编写函数实现顺序栈中的插入(入栈);
2.编写函数实现顺序栈中的删除(出栈);
3.编写程序实现以下功能:
(1) 创建一个顺序栈:22,33,45,99,8;
(2) 调用插入函数,令元素58入栈;
(3) 调用删除函数,删除栈顶的三个元素;
(4) 输出最终顺序栈中的元素。
算法分析:
进栈,判断栈是否已满,若栈满,则进行溢出处理,若栈未满,将栈顶指针加一,将新元素送入到栈顶指针所指的位置。
出栈,判断栈是否为空,若栈空,进行下溢处理,若栈不空,将栈顶元素赋给变量,将栈顶指针退一。
流程图:
N
Y
Y
源程序:
#include #include #define MAXSIZE 50/*定义数组长度*/ int stack[MAXSIZE];/*栈元素的数据类型*/ int top; void push(int x) {if(top==MAXSIZE-1) {printf("栈满溢出\\n"); exit(1); } else{top++; stack[top]=x; } } int pop() {int x; if(top==-1) {printf("栈空溢出\\n"); exit(1); } else {x=stack[top]; top--; } return x; } main() { int i;top=0; printf("请输入顺序栈\\n"); for(i=1;i<=5;i++) {scanf("%d",&stack[i]); top++; } push(58); for(i=1;i<=top;i++) printf("%3d",stack[i]);/*输出删除后的数组*/ printf("\\n"); for(i=1;i<=3;i++) pop(); for(i=1;i<=top;i++) printf("%3d",stack[i]); printf("\\n"); } 实验小结:通过本次实验让我对栈的算法有了进一步了解,让我受益良多。下载本文