顺序栈的基本操作.docx
- 文档编号:29770995
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:8
- 大小:29.19KB
顺序栈的基本操作.docx
《顺序栈的基本操作.docx》由会员分享,可在线阅读,更多相关《顺序栈的基本操作.docx(8页珍藏版)》请在冰豆网上搜索。
顺序栈的基本操作
上机实验报告
学院:
计算机与信息技术学院
专业:
计算机科学与技术(师范)
课程名称:
数据结构
实验题目:
顺序栈的基本操作
班级序号:
师范1班
学号:
学生姓名:
邓雪
指导教师:
杨红颖
完成时间:
2015年12月25号
1、
实验目的:
1.熟悉掌握栈的定义、结构及性质;?
2.能够实现创建一个顺序栈,熟练实现入栈、出栈等栈的基本操作;?
3.了解和掌握栈的应用。
2、实验环境:
MicrosoftVisualc++6.0
3、实验内容及要求:
栈是一种特殊的线性表,逻辑结构和线性表相同,只是其运算规则有更多的限制,故又称为受限的线性表。
建立顺序栈,实现如下功能:
1.建立一个顺序栈
2.输出栈
3.进栈
4.退栈
5.取栈顶元素
6.清空栈
7.判断栈是否为空
进行栈的基本操作时要注意栈"后进先出"的特性。
四、概要设计:
1、通过循环,由键盘输入一串数据。
创建并初始化一个顺序栈。
2、编写实现相关功能函数,完成子函数模块如下。
3、调用子函数,实现菜单调用功能,完成顺序表的相关操作
五、代码:
#include
#include
#definemaxsize64
typedefintdatatype;
//定义结构体
typedefstruct
{
datatypedata[maxsize];
inttop;
}seqstack;
//建立顺序栈
seqstack*SET(seqstack*s)
{
inti;
s=(seqstack*)malloc(sizeof(seqstack));
s->top=-1;
printf("请输入顺序栈元素(整型,以0结束):
");
scanf("%d",&i);
do{
s->top++;
s->data[s->top]=i;
scanf("%d",&i);
}while(i!
=0);
printf("顺序栈建立成功\n");
returns;
}
//清空栈
voidSETNULL(seqstack*s)
{
s->top=-1;}
//判断栈空
intEMPTY(seqstack*s)
{
if(s->top>=0)
return0;
elsereturn1;}
//进栈
seqstack*PUSH(seqstack*s)
{
intx;
printf("你想要插入的数字:
");
scanf("%d",&x);
if(s->top==maxsize-1)
{
printf("overflow");
returnNULL;
}
else
{
s->top++;
s->data[s->top]=x;
}
returns;
}
//退栈
seqstack*POP(seqstack*s)
{
if(s->top<0)
{
printf("underlow");
returns;
}
else
{
s->top--;
printf("删除的栈顶元素是:
");
printf("%d\n",(s->data[s->top+1]));
}
returns;
}
//取栈顶
voidTOP(seqstack*s)
{
if(s->top<0)
{
printf("stackisempty");
}
else
{
printf("当前的栈顶元素是:
");
printf("%d\n",(s->data[s->top]));
}
}
//输出栈
voidprint(seqstack*s)
{
inti;
if(s->top<0)
{
printf("清空栈成功!
");
}
for(i=s->top;i>=0;i--)
printf("%d",s->data[i]);
}
//主函数
intmain()
{
seqstack*s;
inti,j;
printf("\n\n\t\t\t\t欢迎使用\n");
printf("\t\t___________________________________________\n");
printf("\t\t\t1.建立一个顺序栈\n");
printf("\t\t\t2.输出栈\n");
printf("\t\t\t3.进栈\n");
printf("\t\t\t4.退栈\n");
printf("\t\t\t5.取栈顶元素\n");
printf("\t\t\t6.清空栈\n");
printf("\t\t\t7.判断栈是否为空\n");
printf("\t\t\t8.结束程序\n");
printf("\t\t___________________________________________\n");
do
{
printf("\n\n请选择想要实现的功能:
");
scanf("%d",&i);
switch(i)
{
case1:
s=SET(s);
break;
case2:
print(s);
printf("\n");break;
case3:
s=PUSH(s);
print(s);
printf("\n");break;
case4:
s=POP(s);
print(s);
printf("\n");
break;
case5:
TOP(s);
break;
case6:
SETNULL(s);
print(s);
printf("\n");
break;
case7:
j=EMPTY(s);
if(j==1)
printf("空栈\n");
else
printf("非空栈\n");
break;
case8:
printf("_________________谢谢使用__________________\n");
exit(0);
}
}while
(1);
return0;
}
六、运行界面
菜单
功能
七、实验中遇到的问题及总结
1.在写主函数时,如果是用void?
main的形式,那么可以不用有返回值,如果是int?
main或status?
main的话,要有返回值,即末尾要有return语句。
2.应当注意,在算法POP中,删去栈顶元素只要将栈顶指针减1即可,但该元素在下次进栈之前仍是存在的。
2.本次实验加强了对栈的理解和认识以及栈的应用,实现栈的相关操作。
八、参考文献
《数据结构——用C语言描述》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序 基本 操作