栈的链式存储结构的表示和实现实验报告Word格式文档下载.docx
《栈的链式存储结构的表示和实现实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《栈的链式存储结构的表示和实现实验报告Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
实验题目:
栈的链式存储结构的表示和实现
实验日期:
实验要求:
1.认真阅读和掌握本实验的相关知识。
2.编写程序实现栈的链式存储方式。
3.编写程序实现对栈空的判断以及栈的入栈和出栈操作、取栈顶元素。
4.保存程序的运行结果,结合程序分析链式结构的特点。
5.填写实验报告
概要设计:
(1)初始化链栈。
(2)将链栈置空。
(3)完成入栈和出栈操作,完成取栈顶元素操作。
(4)选择菜单上的0,退出该程序的运行,结束实验内容。
初始化栈操作,将栈的栈顶指针置为空值,即设栈S和栈顶指针top,S→top=null。
如果所建栈里有数据元素,要将其置空,同样也是将栈顶指针的值置为空值。
入栈操作,向栈里插入数据元素。
首先要为插入数据元素分配结点,将插入数据元素的值赋值给插入结点的数据域,其次修改栈顶指针的指向关系,即修改插入结点和栈顶指针的地址,最后修改栈顶指针。
出栈操作,从栈里删除数据元素。
首先要判断栈是否为空栈,如是空栈则操作失败。
否则,进行出栈操作,修改删除结点和栈顶指针,最后释放删除结点。
取栈顶元素。
详细设计:
//链栈类型定义
typedefintElemType;
typedefstructstacknode
{
ElemTypedata;
stacknode*next;
}StackNode;
typedefstruct
stacknode*top;
}LinkStack;
//入栈
voidpushLstack(LinkStack*s,ElemTypex)
StackNode*p;
p=newStackNode;
p->
data=x;
next=s->
top;
s->
top=p;
}
//出栈
ElemTypepopstack(LinkStack*s)
ElemTypex;
p=s->
if(s->
top==0)
{
printf("
栈空,不能出栈!
!
\n"
);
return0;
exit(0);
}
x=p->
data;
%d\n"
x);
top=p->
next;
deletep;
returnx;
//取栈顶元素
ElemTypeStackTop(LinkStack*s)
{
printf("
链栈空!
else
x=s->
top->
当前链栈的栈顶元素为%d"
}top
toptop
1,入栈示意图2,出栈示意图
3,出栈4,取栈顶元素
调试分析:
在调试中出现以上错误,经过查找原程序发现scanf("
%d"
&
cord);
中少填写了地址符。
在调试中出现了初始化以后,没有在主菜单中选择操作就直接运行入栈了,经过查找原程序发现在swich语句中少了break。
测试结果:
实验成绩: