数据结构实验:顺序栈操作
- 实验题目:顺序栈操作
- 需求分析:
本演示程序在TC2.0环境下编写调试,完成初始化顺序栈,插入元素,删除栈顶元素,取栈顶元素,遍历顺序栈,置空顺序栈等操作。
输入的形式和输入值的范围。执行插入操作时,需要输入元素的值;执行删除操作时,需要删除栈顶元素;取栈顶元素时,需要输出栈顶元素;在所有输入中,元素的值都是整数。
- 插入操作中依次输入10,20,30,40,生成一个顺序栈
- 删除操作删除栈顶元素40
- 获取栈顶元素30
- 制空顺序栈
- 首先要根据键盘输入的数据初始化一个顺序栈;其次根据屏幕的菜单选择,可以进行数据的插入或删除操作,并在插入或删除数据后,顺序栈;最后在屏幕菜单中选择6,即可结束程序的运行。
- 程序所能达到的功能。完成顺序栈的初始化、插入、删除、获取、遍历、置空操作。
- 测试数据。
- 概要设计
- 主函数main()
- 初始化顺序栈函数 InitStack()
- 入栈函数Push()
- 出栈函数Pop()
- 获取栈顶元素函数GetTop()
- 遍历顺序栈函数Outstack()
- 置空顺序栈函数setEmpty()
- 为了实现上述程序功能,需要定义顺序栈的数据结构。
- 本程序包含7个函数
- 详细设计
#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 20
#define elemtype int
typedef struct{
elemtype stack[MAXNUM];
int top;
}sqstack;
void Initstack(sqstack *p){
if(!p)
printf("内存分配失败!");
p->top =-1;
}
void Push (sqstack *p,elemtype x){
if(p->top <MAXNUM-1){
p->top =p->top +1;
p->stack [p->top ]=x;
}
else
printf("Overflow!\n");
}
elemtype Pop(sqstack *p){
elemtype x;
if(p->top >=0){
x=p->stack [p->top ];
printf("以前的栈顶数据元素%d已经被删除!\n",p->stack [p->top ]);
p->top =p->top -1;
return (x);
}
else {
printf("Underflow!\n");
return (0);
}
}
elemtype Gettop(sqstack *p){
elemtype x;
if(p->top >=0){
x=p->stack [p->top ];
printf("\n栈顶元素为:%d\n",x);
return (0);
}
else {
printf("Underflow!\n");
return (0);
}
}
void Outstack (sqstack*p){
int i;
printf("\n");
if(p->top<0)
printf("这是一个空栈!");
printf("\n");
for(i=p->top;i>=0;i--)
printf("第%d个数据元素是:%6d\n",i,p->stack[i]);
}
void setempty(sqstack *p){
p->top =-1;
}
int main(){
sqstack *q;
int cord;
elemtype a;
printf("第一次使用必须初始化!\n");
do{
printf("\n");
printf("\n-----------主菜单------------");
printf("\n 1 初始化顺序栈 \n");
printf("\n 2 插入一个元素 \n");
printf("\n 3 删除栈顶元素 \n");
printf("\n 4 取栈顶元素 \n");
printf("\n 5 置空顺序栈 \n");
printf("\n 6 结束程序运行 \n");
printf("\n-----------------------------");
printf("请输入你的选择(1,2,3,4,5,6)\n");
scanf("%d",&cord);
printf("\n");
switch (cord) {
case 1:{
q=(sqstack*)malloc(sizeof(sqstack));
Initstack(q);
Outstack(q);
break;
}
case 2:{
printf("请输入要插入的数据元素:a=");
scanf("%d",&a);
Push(q,a);
Outstack(q);
break;
}
case 3:{
Pop(q);
Outstack(q);
break;
}
case 4:{
Gettop(q);
Outstack(q);
break;
}
case 5:{
setempty(q);
printf("\n顺序栈被置空!\n");
Outstack(q);
break;
}
case 6:{
exit(0);
break;
}
}
}while(cord<=6);
return 0;
}
- 调试分析
- 使用说明
程序名为LinkList.exe,运行环境为DOS。程序执行后显示:
- 初始化顺序栈
- 插入一个元素
- 删除栈顶元素
- 取栈顶元素
- 置空顺序栈
- 结束程序运行
=================================
请输入你的选择(1,2,3,4,5,6)
在"请输入你的选择(1,2,3,4,5,6)"后输入数字选择执行不同的功能。要求首先输入足够多的插入元素,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后顺序栈的内容。
选择6:退出程序
选择1:显示"这是一个空栈"并初始化顺序栈。
选择2:显示"请输入要插入的数据元素:a=",要求输入元素的值。
选择3:显示"以前的栈顶数据元素已经被删除!\n:",执行成功后遍历顺序表,但被删除位置上没有元素时输出"Underflow!"
选择4:输出栈顶元素并遍历顺序表
选择5:置空顺序表并输出"顺序栈被置空!"
- 测试结果
1、
2、
3、
4、
5、