栈的实现Word格式文档下载.docx
- 文档编号:16178062
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:12
- 大小:129.20KB
栈的实现Word格式文档下载.docx
《栈的实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《栈的实现Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
实验内容
1.采用链式存储实现栈的初始化、入栈、出栈、显示、判空操作。
2.采用顺序存储实现栈的初始化、入栈、出栈、显示、判空操作。
3.编写一个主函数,调试上述算法。
实验数据
1、运行栈的顺序存储程序时,一开始即提示输入5个元素。
当键入的数据非法时,会提示数据非法,并要求重新输入。
正确录完5个数据会要求从输入端入栈一个元素,同样程序也会判断键入数据的合法性,成功入栈后会显示栈顶元素,为了达到对目的,元素出栈前先将栈中所有元素显现后再执行两次出栈操作,再执行显示所有元素操作。
最后会清空栈,然后显示栈中所有元素时则会提示栈为空。
程序执行如下:
二、栈的链表操作程序运行流程和上述流程相同,程序运行如下:
实验总结
1.两个程序中在输入数据中都调用intJudgeData()函数判断键入数据的合法性。
使程序不会因为键入数据的非法而进入死循环,让程序得以顺利执行。
2.本次实验和前两次实验在操作的算法的实现类似,通过本次实验让我更深刻地了解了栈的性质,让我从实践中理解了“栈是一种操作受限的线性表”这句话。
指导教师意见
签名:
年月日
注:
请在实验报告后附程序清单
//实验三之存储.cpp:
定义控制台应用程序的入口点。
//
#include"
stdafx.h"
#include<
iostream>
stdlib.h>
usingnamespacestd;
typedefintElemType;
structStack
{
ElemType*stack;
inttop;
intMaxSize;
};
intJudgeData()
charc[100];
Judge:
cin>
>
c;
if(c[0]=='
-'
||c[0]>
='
0'
&
c[0]<
9'
)
{
for(inti=1;
c[i]!
\0'
;
i++)
{
if(c[i]<
'
||c[i]>
{
cout<
<
"
您输入的数据非法!
endl;
请重新输入合法类型数据:
"
gotoJudge;
}
}
returnatoi(c);
}
else
cout<
gotoJudge;
}
voidInitStack(Stack&
S)
S.MaxSize=10;
S.stack=newElemType[S.MaxSize];
if(!
S.stack)
cerr<
动态存储分配失败!
exit
(1);
}
栈初始化成功!
S.top=-1;
voidPush(Stack&
S,ElemTypeitem)
if(S.top==S.MaxSize-1)
intk=sizeof(ElemType);
S.stack=(ElemType*)realloc(S.stack,2*S.MaxSize*k);
S.MaxSize=2*S.MaxSize;
S.top++;
S.stack[S.top]=item;
cout<
item<
入栈成功!
ElemTypePop(Stack&
if(S.top==-1)
Stackisempty!
S.top--;
return(S.stack[S.top+1]);
voidPeek(Stack&
栈顶元素为:
S.stack[S.top]<
voidDisplayStack(StackS)
{if(S.top==-1)
栈为空!
else
栈中所有元素为:
while(S.top!
=-1)
cout<
Pop(S)<
voidEmptyStack(Stack&
栈已为空!
栈不为空!
voidClearStack(Stack&
if(S.stack)
delete[]S.stack;
S.stack=NULL;
S.MaxSize=0;
清空栈成功!
int_tmain(intargc,_TCHAR*argv[])
StackS;
InitStack(S);
请依次输入入栈的5个元素:
for(inti=0;
i<
5;
Push(S,(ElemType)JudgeData());
DisplayStack(S);
请输入要入栈的元素:
ElemTypea=(ElemType)JudgeData();
Push(S,a);
Peek(S);
栈顶元素"
出栈成功!
ClearStack(S);
return0;
//实验三之链表.cpp:
structSNode
ElemTypedata;
SNode*next;
voidInitStack(SNode*&
HS)
HS=NULL;
voidPush(SNode*&
HS,ElemTypeitem)
SNode*newptr=newSNode;
newptr->
data=item;
next=HS;
HS=newptr;
ElemTypePop(SNode*&
if(HS==NULL)
SNode*p=HS;
HS=HS->
next;
ElemTypetemp=p->
data;
returntemp;
voidPeek(SNode*HS)
栈为空,读取失败!
栈顶元素为:
HS->
data<
voidDisplayStack(SNode*HS)
while(HS!
=NULL)
Pop(HS)<
voidEmptyStack(SNode*HS)
elsecout<
SNode*HS;
InitStack(HS);
Push(HS,(ElemType)JudgeData());
DisplayStack(HS);
Push(HS,a);
Peek(HS);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现