栈的操作实验报告Word文档下载推荐.docx
- 文档编号:14217673
- 上传时间:2022-10-20
- 格式:DOCX
- 页数:25
- 大小:24.39KB
栈的操作实验报告Word文档下载推荐.docx
《栈的操作实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《栈的操作实验报告Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
top==MAXNUM-1,栈满时,不能入栈;
否则出现空间溢出,引起错误,这种现象称为上溢。
出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。
通常栈空作为一种控制转移的条件。
注意:
(1)顺序栈中元素用向量存放
(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点
(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置
参考程序:
#include<
stdio."
);
}
*出栈*
ElemTypePop(SqStack*p)
{ElemTypex;
if(p->
top!
=0)
{x=p->
stack[p->
top];
printf("
以前的栈顶数据元素%d已经被删除!
\n"
p->
top]);
p->
top=p->
top-1;
return(x);
}
else
{printf("
Underflow!
return(0);
*获取栈顶元素*
ElemTypeGetTop(SqStack*p)
*遍历顺序栈*
voidOutStack(SqStack*p)
{inti;
printf("
top<
0)
这是一个空栈!
"
for(i=p->
top;
i>
=0;
i--)
printf("
第%d个数据元素是:
%6d\n"
i,p->
stack[i]);
*置空顺序栈*
voidsetEmpty(SqStack*p)
{
top=-1;
*主函数*
main()
{SqStack*q;
inty,cord;
ElemTypea;
do{
第一次使用必须初始化!
\n主菜单\n"
\n1初始化顺序栈\n"
\n2插入一个元素\n"
\n3删除栈顶元素\n"
\n4取栈顶元素\n"
\n5置空顺序栈\n"
\n6结束程序运行\n"
\n\n"
请输入您的选择(1,2,3,4,5,6)"
scanf("
%d"
&
cord);
switch(cord)
{case1:
{q=(SqStack*)malloc(sizeof(SqStack));
InitStack(q);
OutStack(q);
}break;
case2:
{printf("
请输入要插入的数据元素:
a="
scanf("
a);
Push(q,a);
case3:
{Pop(q);
case4:
{y=GetTop(q);
printf("
\n栈顶元素为:
%d\n"
y);
case5:
{setEmpty(q);
\n顺序栈被置空!
case6:
exit(0);
}
}while(cord<
=6);
[实验2]栈的链式表示和实现
编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化链栈
(2)链栈置空
(3)入栈
(4)出栈
(5)取栈顶元素
(6)遍历链栈
链栈是没有附加头结点的运算受限的单链表。
栈顶指针就是链表的头指针。
(1)LinkStack结构类型的定义可以方便地在函数体中修改top指针本身
(2)若要记录栈中元素个数,可将元素个数属性放在LinkStack类型中定义。
(3)链栈中的结点是动态分配的,所以可以不考虑上溢。
#include"
*链栈置空*
voidsetEmpty(LinkStack*s)
{s->
top=NULL;
\n链栈被置空!
*入栈*
voidpushLstack(LinkStack*s,Elemtypex)
{StackNode*p;
p=(StackNode*)malloc(sizeof(StackNode));
建立一个节点。
p->
data=x;
next=s->
由于是在栈顶pushLstack,所以要指向栈顶。
s->
top=p;
插入
ElemtypepopLstack(LinkStack*s)
{Elemtypex;
StackNode*p;
p=s->
指向栈顶
if(s->
top==0)
\n栈空,不能出栈!
exit(-1);
x=p->
data;
next;
当前的栈顶指向原栈的next
free(p);
释放
returnx;
*取栈顶元素*
ElemtypeStackTop(LinkStack*s)
{if(s->
\n链栈空\n"
returns->
top->
*遍历链栈*
voidDisp(LinkStack*s)
{printf("
\n链栈中的数据为:
=======================================\n"
while(p!
=NULL)
data);
p=p->
voidmain()
=================链栈操作=================\n\n"
inti,m,n,a;
LinkStack*s;
s=(LinkStack*)malloc(sizeof(LinkStack));
intcord;
do{printf("
\n1初始化链栈\n"
\n2入栈\n"
\n3出栈\n"
\n5置空链栈\n"
{InitStack(s);
Disp(s);
{printf("
输入将要压入链栈的数据的个数:
n="
scanf("
n);
依次将%d个数据压入链栈:
n);
for(i=1;
i<
=n;
i++)
{scanf("
pushLstack(s,a);
}
Disp(s);
\n出栈操作开始!
输入将要出栈的数据个数:
m="
m);
for(i=1;
=m;
{printf("
\n第%d次出栈的数据是:
i,popLstack(s));
\n\n链栈的栈顶元素为:
StackTop(s));
{setEmpty(s);
[实验3]队列的顺序表示和实现
实验内容与要求
编写一个程序实现顺序队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化队列
(2)建立顺序队列
(3)入队
(4)出队
(5)判断队列是否为空
(6)取队头元素
(7)遍历队列
队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。
入队时,将新元素插入rear所指的位置,然后将rear加1。
出队时,删去
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)