用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx

上传人:b****6 文档编号:16366250 上传时间:2022-11-23 格式:DOCX 页数:9 大小:59.38KB
下载 相关 举报
用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx_第1页
第1页 / 共9页
用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx_第2页
第2页 / 共9页
用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx_第3页
第3页 / 共9页
用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx_第4页
第4页 / 共9页
用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx

《用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。

用顺序栈进行栈的基本操作数据结构课程设计报告Word文档下载推荐.docx

二.关键字

TopStacksizeBase

三.内容要求

先为栈分配一个基本容量,并给存储空间分配增量当栈的空间不够使用时再逐段扩大。

其中stacksize指示的是栈的当前可使用的最大容量。

而false和true分别指的是栈是否为空,false为1反之亦然;

error和ok则是指栈中元素是否可以返回即栈底元素是否为零,error为1反之亦然。

分别对从一到十二等十二个元素进行压栈然后弹栈,每当插入新的栈顶元素时,指针top增1;

删除栈顶元素时即弹栈时指针top减1,因此非空栈中的栈顶指针始终在栈顶元素的下一个位置上。

最后进行销毁栈的操作,并得到top=0,stacksize=0,base=0的运行结果。

四.流程图

五.程序源代码

//main3-1.cpp检验bo3-1.cpp的主程序

//#include"

c1.h"

#include<

iostream.h>

#include<

string.h>

ctype.h>

malloc.h>

limits.h>

//#include<

stdio.h>

stdlib.h>

io.h>

math.h>

sys/timeb.h>

stdarg.h>

//提供宏va_start,va_arg和va_end,用于存取变长参数表

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

//#defineINFEASIBLE-1没使用

//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行

typedefintStatus;

//Status是函数的类型,其值是函数结果状态代码,如OK等

typedefintBoolean;

//Boolean是布尔类型,其值是TRUE或FALSE

typedefintSElemType;

//定义栈元素类型,此句要在c3-1.h的前面

//#include"

c3-1.h"

#defineSTACK_INIT_SIZE10//存储空间初始分配量

#defineSTACK_INCREMENT2//存储空间分配增量

structSqStack//顺序栈

{

SElemType*base;

//在栈构造之前和销毁之后,base的值为NULL

SElemType*top;

//栈顶指针

intstacksize;

//当前已分配的存储空间,以元素为单位

};

voidInitStack(SqStack&

S)//构造一个空栈S。

{

if(!

(S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))

exit(OVERFLOW);

//动态分配存储空间失败,则退出

S.top=S.base;

//栈顶指向栈底(空栈)

S.stacksize=STACK_INIT_SIZE;

//存储空间为初始分配量

}

voidDestroyStack(SqStack&

S)//销毁栈S,S不再存在

free(S.base);

//释放栈空间

S.top=S.base=NULL;

//栈顶、栈底指针均为空

S.stacksize=0;

//当前已分配的存储空间为0

voidClearStack(SqStack&

S)//把栈S置为空栈

//栈顶指针指向栈底

StatusStackEmpty(SqStackS)//若栈S为空栈,则返回TRUE;

否则返回FALSE

{

if(S.top==S.base)//空栈条件

returnTRUE;

else

returnFALSE;

intStackLength(SqStackS)//返回栈S的元素个数,即栈的长度

returnS.top-S.base;

StatusGetTop(SqStackS,SElemType&

e)//若栈S不空,则用e返回S的栈顶元素,并返回OK;

否则返回ERROR

if(S.top>

S.base)//栈不空

e=*(S.top-1);

//将栈顶元素赋给e

returnOK;

returnERROR;

voidPush(SqStack&

S,SElemTypee)//插入元素e为栈S新的栈顶元素

{。

if(S.top-S.base==S.stacksize)//栈满

S.base=(SElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT)*

sizeof(SElemType));

//追加存储空间

S.base)//追加存储空间失败,则退出

S.top=S.base+S.stacksize;

//修改栈顶指针,指向新的栈顶

S.stacksize+=STACK_INCREMENT;

//更新当前已分配的存储空间

*(S.top)++=e;

//将e入栈,成为新的栈顶元素,栈顶指针上移1个存储单元

StatusPop(SqStack&

S,SElemType&

e)

if(S.top==S.base)//栈空

e=*--S.top;

//将栈顶元素赋给e,栈顶指针下移1个存储单元

voidStackTraverse(SqStackS,void(*visit)(SElemType))//从栈底到栈顶依次对栈S中每个元素调用函数visit()

while(S.top>

S.base)//S.base指向栈元素

visit(*S.base++);

//对该栈元素调用visit(),

cout<

<

"

\n"

;

//栈底指针上移1个存储单元

#defineElemTypeSElemType

Statusequal(ElemTypec1,ElemTypec2)//判断是否相等的函数

{

if(c1==c2)

intcomp(ElemTypea,ElemTypeb)//根据a<

、=或>

b,分别返回-1、0或1

if(a==b)

return0;

return(a-b)/abs(a-b);

voidprint(ElemTypec)//以十进制整型的格式输出元素的值

c;

\t"

voidprint1(ElemType&

c)//以十进制整型的格式输出元素的值(设c为引用类型)

voidprint2(ElemTypec)//以字符型的格式输出元素的值

voidmain()

intj;

SqStacks;

SElemTypee;

InitStack(s);

//初始化栈s

for(j=1;

j<

=12;

j++)

Push(s,j);

//将值为j的栈元素入栈s中

栈中元素依次为\n"

StackTraverse(s,print);

//从栈底到栈顶依次对栈s中每个元素调用print()函数

Pop(s,e);

//弹出栈顶元素,其值赋给e

弹出的栈顶元素e="

e;

endl;

栈空否?

StackEmpty(s);

\t(1:

空0:

否)"

GetTop(s,e);

//将新的栈顶元素赋给e

\n栈顶元素e="

栈的长度为"

StackLength(s);

ClearStack(s);

//清空栈s

清空栈后,栈空否?

否)\n"

DestroyStack(s);

//销毁栈s

销毁栈后:

\ns.top="

ElemType(s.top);

s.stacksize="

ElemType(s.stacksize);

s.base="

ElemType(s.base);

四.编译及调试

五.参考文献

1.李春葆等编著.C语言程序设计题典.北京:

清华大学出版社,2002

2.钱能编著.C++程序设计教程.北京:

清华大学出版社,1999

3.程耀等编著.VisualC++6.0程序设计教程.北京:

电子工业出版社,1998

评语

评阅人:

日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1