实验三 实现顺序栈的插入和删除算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三顺序栈的插入和删除算法
一.实验目的:
掌握栈在顺序存储结构上的插入和删除运算。
二.实验要求:
1. 给出程序设计的基本思想、原理和算法描述。
2. 画出程序流程图;根据数据结构有关知识编出算法程序;
3. 源程序给出注释。
4. 保存和打印出程序的运行结果,并结合程序进行分析。
三.实验内容:
1.编写函数实现顺序栈中的插入(入栈);
2.编写函数实现顺序栈中的删除(出栈);
3.编写程序实现以下功能:
(1) 创建一个顺序栈:22,33,45,99,8;
(2) 调用插入函数,令元素58入栈;
(3) 调用删除函数,删除栈顶的三个元素;
(4) 输出最终顺序栈中的元素。
算法分析:
进栈,判断栈是否已满,若栈满,则进行溢出处理,若栈未满,将栈顶指针加一,将新元素送入到栈顶指针所指的位置。
出栈,判断栈是否为空,若栈空,进行下溢处理,若栈不空,将栈顶元素赋给变量,将栈顶指针退一。
流程图:
源程序:
#include<stdio.h>
#include<stdlib.h>
#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");
}
实验小结:通过本次实验让我对栈的算法有了进一步了解,让我受益良多。