用顺序结构表示栈并实现栈的各种基本操作Word下载.docx
- 文档编号:13547004
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:21
- 大小:20.42KB
用顺序结构表示栈并实现栈的各种基本操作Word下载.docx
《用顺序结构表示栈并实现栈的各种基本操作Word下载.docx》由会员分享,可在线阅读,更多相关《用顺序结构表示栈并实现栈的各种基本操作Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。
通常栈空作为一种控制转移的条件。
注意:
(1)顺序栈中元素用向量存放
(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点
(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置
【实现提示】
/*定义顺序栈的存储结构*/
typedefstruct{
ElemTypestack[MAXNUM];
inttop;
}SqStack;
/*初始化顺序栈函数*/
voidInitStack(SqStack*p)
{q=(SqStack*)malloc(sizeof(SqStack)/*申请空间*/)
/*入栈函数*/
voidPush(SqStack*p,ElemTypex)
{if(p->
top<
MAXNUM-1)
{p->
top=p->
top+1;
/*栈顶+1*/
p->
stack[p->
top]=x;
}/*数据入栈*/
}
/*出栈函数*/
ElemTypePop(SqStack*p)
{x=p->
top];
/*将栈顶元素赋给x*/
top-1;
}/*栈顶-1*/
/*获取栈顶元素函数*/
ElemTypeGetTop(SqStack*p)
{x=p->
/*遍历顺序栈函数*/
voidOutStack(SqStack*p)
{for(i=p->
top;
i>
=0;
i--)
printf("
第%d个数据元素是:
%6d\n"
i,p->
stack[i]);
/*置空顺序栈函数*/
voidsetEmpty(SqStack*p)
{p->
top=-1;
【参考程序】
#include<
stdio.h>
stdlib.h>
#defineMAXNUM20
#defineElemTypeint
typedefstruct
{ElemTypestack[MAXNUM];
/*初始化顺序栈*/
{if(!
p)
printf("
Eorror"
);
top=-1;
/*入栈*/
{if(p->
{p->
}
else
Overflow!
\n"
/*出栈*/
{ElemTypex;
if(p->
top!
=0)
{x=p->
以前的栈顶数据元素%d已经被删除!
p->
top]);
return(x);
{printf("
Underflow!
return(0);
/*获取栈顶元素*/
/*遍历顺序栈*/
{inti;
0)
这是一个空栈!
"
for(i=p->
/*置空顺序栈*/
{
/*主函数*/
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:
请输入要插入的数据元素:
a="
a);
Push(q,a);
case3:
{Pop(q);
case4:
{y=GetTop(q);
\n栈顶元素为:
%d\n"
y);
case5:
{setEmpty(q);
\n顺序栈被置空!
case6:
exit(0);
}while(cord<
=6);
【思考与提高】
(1)读栈顶元素的算法与退栈顶元素的算法有何区别?
(2)如果一个程序中要用到两个栈,为了不发生上溢错误,就必须给每个栈预先分配一个足够大的存储空间。
若每个栈都预分配过大的存储空间,势必会造成系统空间紧张。
如何解决这个问题?
实验二:
栈的链式表示和实现
编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化链栈
(2)链栈置空
(3)入栈
(4)出栈
(5)取栈顶元素
(6)遍历链栈
链栈是没有附加头结点的运算受限的单链表。
栈顶指针就是链表的头指针。
(1)LinkStack结构类型的定义可以方便地在函数体中修改top指针本身
(2)若要记录栈中元素个数,可将元素个数属性放在LinkStack类型中定义。
(3)链栈中的结点是动态分配的,所以可以不考虑上溢。
typedefintElemtype;
typedefstructstacknode{
Elemtypedata;
stacknode*next;
}StackNode;
/*定义链栈*/
stacknode*top;
//栈顶指针
}LinkStack;
/*初始化链栈函数*/
voidInitStack(LinkStack*s)
{s=(LinkStack*)malloc(sizeof(LinkStack));
/*初始化申请空间*/
s->
top=NULL;
/*链栈置空函数*/
voidsetEmpty(LinkStack*s)
{s->
voidpushLstack(LinkStack*s,Elemtypex)
{p=(StackNode*)malloc(sizeof(StackNode));
//建立一个节点。
data=x;
next=s->
//指向栈顶。
s->
top=p;
//插入
ElemtypepopLstack(LinkStack*s)
data;
next;
//当前的栈顶指向原栈的next
free(p);
//释放
/*取栈顶元素函数*/
ElemtypeStackTop(LinkStack*s)
{returns->
top->
/*遍历链栈函数*/
voidDisp(LinkStack*s)
{while(p!
=NULL)
data);
p=p->
#include"
stdio.h"
malloc.h"
stdlib.h"
/*初始化链栈*/
\n已经初始化链栈!
/*链栈置空*/
\n链栈被置空!
{StackNode*p;
p=(StackNode*)malloc(sizeof(StackNode));
//由于是在栈顶pushLstack,所以要指向栈顶。
{Elemtypex;
StackNode*p;
p=s->
t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序 结构 表示 实现 各种 基本 操作