用顺序栈进行栈的基本操作-C源程序

用顺序栈进行栈的基本操作-C源程序

ID:41962821

大小:75.00 KB

页数:6页

时间:2019-09-04

用顺序栈进行栈的基本操作-C源程序_第1页
用顺序栈进行栈的基本操作-C源程序_第2页
用顺序栈进行栈的基本操作-C源程序_第3页
用顺序栈进行栈的基本操作-C源程序_第4页
用顺序栈进行栈的基本操作-C源程序_第5页
资源描述:

《用顺序栈进行栈的基本操作-C源程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、//main3-l.cpp检验bo3-l.cpp的主程序//#includeHcl.hn#include#include#include#include#include//#include#include#include#include#include#include//提供宏va_start,va_arg和va_end,用于存取变长参数表#defineTRUE1♦de

2、fineFALSE0#defineOK1#defineERROR0//#defineINFEASIBLE-1没使用//ttdefineOVERFLOW-2因为在math.h中已定义0VERFLOW的值为3,故去掉此行typedefintStatus;//Status是函数的类型,其值是函数结果状态代码,如OK等typedefintBoolean;//Boolean是布尔类型,其值是TRUE或FALSEtypedefintSElemType;//定义栈元素类型,此句要在c3-l・h的前面//#includef,c3-l.hn#defineSTACK_INIT_SIZE10//存储空

3、间初始分配量♦defineSTACK_INCREMENT2//存储空间分配增量structSqStack//顺序栈SElemType*base;//在栈构造之前和销毁之后,base的值为NULLSElemType*top;//栈顶指针intstacksize;//当前已分配的存储空间,以元素为单位};voidInitStack(SqStack&S)//构造一个空栈S。{if(!(S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))exit(OVERFLOW);//动态分配存储空间失败,则退出S.top=S.b

4、ase;//栈顶指向栈底(空栈)S.stacksize=STACK_INIT_SIZE;//存储空间为初始分配量)voidDestroyStack(SqStack&S)//销毁栈S,S不再存在{free(S.base);//释放栈空间S・top二S・base二NULL;//栈顶、栈底指针均为空S.stacksize=O;//当前已分配的存储空间为0}voidClearStack(SqStack&S)//把栈S置为空栈{S.top=S.base;//栈顶指针指向栈底}StatusStackEmpty(SqStackS)//若栈S为空栈,则返冋TRUE;否则返冋FALSE{if(S.

5、top==S.base)//空栈条件returnTRUE;elsereturnFALSE;intStackLength(SqStackS)//返回栈S的元素个数,即栈的长度{returnS・top-S.base;}StatusGetTop(SqStackSzSElemType&e)//若栈S不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR{if(S・top>S・base)//栈不空{e=*(S.top-1);//将栈顶元素赋给ereturnOK;}elsereturnERROR;}voidPush(SqStack&S,SElemTypee)//插入元素e为栈S新的栈顶

6、元素{if(S・top-S・base==S.stacksize)//栈满{S.base=(SElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));//追加存储空间if(!S.base)//追加存储空间失败,则退出exit(OVERFLOW);S.top=S.base+S.stacksize;//修改栈顶指针,指向新的栈顶S.stacksize+=STACK_INCREMENT;//更新当前已分配的存储空间}SS・top)++=e;//将e入栈,成为新的栈顶元素,栈顶指针上移1个存储单元S

7、tatusPop(SqStack&SzSElemType&e){if(S.top==S.base)//栈空returnERROR;e=*-S.top;//将栈顶元素赋给e,栈顶指针卞移1个存储单元returnOK;}voidStackTraverse(SqStackS,void(*visit)(SElemType))//从栈底到栈顶依次对栈S中每个元素调用函数visitO{while(S.top>S.base)//S.base指向栈元素visit(*S.base++);//对该栈

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。