数据结构顺序栈的基本运算Word文档格式.docx
- 文档编号:17557639
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:17
- 大小:46.34KB
数据结构顺序栈的基本运算Word文档格式.docx
《数据结构顺序栈的基本运算Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构顺序栈的基本运算Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
输出格式:
判断顺序栈是否为空:
测试数据:
初始化顺序表后,显示顺序栈为空。
(2)依次进栈元素a,b,c,d,e
输入参数的格式和合法取值范围:
依次进栈元素a,b,c,d,e并用逗号分隔。
依次进栈元素a,b,c,d,e。
依次进队列元素a,b,c,d,e后,顺序栈中包含a,b,c,d,e五个元素。
(3)输出栈的长度
此时顺序栈中包含a,b,c,d,e五个元素,故
长度为5。
输出栈长度:
5。
此时顺序栈中的元素为a,b,c,d,e。
所以屏幕显示输出栈长度:
(4)输出从栈顶到栈底的元素
进栈顺序依次为a,b,c,d,e,故栈底为a,栈
顶为e,则栈顶到栈底元素依次为e,d,c,b,a。
输出从栈顶到栈底的元素:
edcba
进栈顺序依次为a,b,c,d,e,故栈底为a,栈顶为e,则栈顶到栈底
元素依次为e,d,c,b,a。
(5)读出栈顶元素
顺序栈中元素从栈顶到栈底依次为
e,d,c,b,a。
故栈顶为e。
读出栈顶元素:
e。
顺序栈中元素从栈顶到栈底依次为e,d,c,b,a。
故屏幕显示读出栈
顶元素为e。
(6)删除栈顶元素
故栈顶为e,删除e。
删除栈顶元素e。
进行删除栈顶元素
操作,即删除元素e。
(7)输出从栈顶到栈底的元素
此时删除了栈顶元素e,栈顶元素变为d,故
顺序栈中元素从栈顶到栈底依次为d,c,b,a,
dcba
此时栈顶到栈底元素依次为d,c,b,a,故屏幕显示输出从栈顶到栈
底的元素:
dcba。
3.概要设计
(1)给出所用抽象数据类型的逻辑定义。
ADTStack{
数据对象:
D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
结构关系:
R={<
ai-1,ai>
|ai-1,ai∈D,i=2,…,n}
基本操作:
InitStack(&
S)
操作前提:
S是一个未初始化的空栈。
操作结果:
构造一个空栈S。
DestroyStack(&
操作前提:
栈S已存在。
操作结果:
栈S清被摧毁。
StackEmpty(S)
若栈S为空栈,则返回TURE,否则返回FALSE。
StackJudgement
操作结果:
若栈S为空栈,则输出是,没否则输出否。
StackLength(S)
返回S的元素个数。
Push(&
S,e)
操作前提:
插入元素e为新的栈顶元素。
GetTop(S,&
e)
栈S已存在且非空。
用e返回S的栈顶元素。
Pop(&
S,&
删除S的栈顶元素,并用e返回其值。
StackTraverse(S,visit())
从栈底到栈顶依次对S的每个数据元素调用函数visit()。
一
旦visit()失败,则操作失败。
(2)画出各模块之间的调用关系图。
mainDestroyStack
InitStack
StackEmpty
StackJudgement
StackLength
Push
GetTop
Pop
StackTraverse
(3)用伪码给出主程序的主要处理过程。
#include<
stdio.h>
#include<
malloc.h>
stdlib.h>
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineNULL0
#defineOVERFLOW-2
typedefintStatus;
typedefcharSElemType;
Statusvisit(SElemTypee);
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
StatusInitStack(SqStack&
S){
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!
S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}
StatusDestroyStack(SqStack&
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
StatusStackEmpty(SqStackS){
if(S.top==S.base)
returnTRUE;
else
returnFALSE;
StatusStackJudgement(SqStackS)
{
{
printf("
是\n"
);
}
否\n"
StatusPush(SqStack&
S,SElemTypee){
if(S.top-S.base>
=S.stacksize){
S.base=(SElemType*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
*S.top++=e;
intStackLength(SqStackS){
returnS.top-S.base;
}//StackLength
Statusvisit(SElemTypee){
printf("
%c"
e);
returnOK;
StatusGetTop(SqStackS,SElemType&
e){
if(S.top==S.base)returnERROR;
e=*(S.top-1);
returne;
StatusPop(SqStack&
S,SElemType&
e=*--S.top;
StatusStackTraverse(SqStackS,Status(*visit)(SElemType)){
while(S.top!
=S.base)
visit(*--S.top);
voidmain(){
SElemTypee;
SqStackS;
printf("
(1)初始化顺序栈。
\n"
InitStack(S);
(2)判断顺序栈是否为空:
StackJudgement(S);
StackEmpty(S);
(3)依次进栈元素a,b,c,d,e:
Push(S,'
a'
b'
c'
d'
e'
(4)判断顺序栈是否为空:
(5)输出栈长度:
%d\n"
StackLength(S));
(6)输出从栈顶到栈底的元素:
StackTraverse(S,visit);
(7)读出栈顶元素:
%c\n"
GetTop(S,e));
(8)删除栈顶元素:
Pop(S,e));
(9)输出从栈顶到栈底的元素:
(10)判断顺序栈是否为空\n"
(11)释放栈。
"
DestroyStack(S);
4.详细设计
(1)类型定义
typedefstruct{
(2)给出所用抽象数据类型中每个操作的伪码算法
StatusInitStack(SqStack&
(3)给出其他模块的伪码算法
voidmain(){
5.调试分析
(1)调试过程中主要遇到哪些问题?
是如何解决的?
在调试过程中,输出从栈顶到栈底的元素时出现了问题,使得输出不是字母而是数字,后发现原因在输出的数据类型错误,从而输出数字,将输出数据类型改为%c字符型后结果正确。
(2)经验和体会
通过这次试验,我深切的理解了顺序栈的知识要点和表示与实现。
并通过C语言实现了顺序队列的初始化,判空,删除,插入,等。
进一步熟练了C语言操作环境。
6.测试结果
7.附件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 顺序 基本 运算