- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 栈和队列选编
第3章 栈与队列 ;栈与队列的基本概念 ;栈的示意图;3.1 栈3.1.1 抽象数据类型栈的定义;基本操作:
InitStack (S)
操作结果:构造一个空栈 S。
DestroyStack (S)
初始条件:栈 S 已存在。
操作结果:栈 S 被销毁。
ClearStack (S)
初始条件:栈 S 已存在。
操作结果:将 S 清为空栈。
StackEmpty (S)
初始条件:栈 S 已存在。
操作结果:若栈 S 为空栈,则返回TRUE,否则返回FALSE。
StackLength (S)
初始条件:栈 S 已存在。
操作结果:返回栈 S 中元素个数,即栈的长度。
GetTop (S, e)
初始条件:栈 S 已存在且非空。
操作结果:用 e 返回S的栈顶元素。; Push (S, e)
初始条件:栈 S 已存在。
操作结果:插入元素 e 为新的栈顶元素。
Pop (S, e)
初始条件:栈 S 已存在且非空。
操作结果:删除 S 的栈顶元素,并用 e 返回其值。
StackTraverse (S, visit( ))
初始条件:栈 S 已存在且非空,visit( )为元素的访问函数。
操作结果:从栈底到栈顶依次对S的每个元素调用函数visit( ),
一旦visit( )失败,则操作失败。
} ADT Stack
;3.1.2 栈的表示和实现;3.1.2 栈的表示和实现;链栈的几种状态 :;顺序栈的定义;入栈、出栈操作示意图;顺序栈;顺序栈的基本操作;顺序栈的初始化操作;Status InitStack (SqStack S)
{
// 构造一个空栈 S,分配空间为STACK_INIT_SIZE个元素
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize= STACK_INIT_SIZE;
return OK;
} //InitStack ;Status GetTop (SqStack S,SElemType e)
{
// 若栈不空,则用e返回栈顶元素,并返回OK;否则返回Error
if(S.top==S.base) return error;
e=*(S.top-1);
return OK;
} //GetTop
;Status Push (SqStack S,SElemType e)
{
// 插入元素e为新的栈顶元素
if ( S.top-S.base = S.stacksize )
//栈满,需要增加STACKINCREMENT个存储空间
{
S.base=( SElemType * ) realloc ( S.base,
(S.stacksize+ STACKINCREMENT) ×sizeof(SElemType) );
if ( !S.base ) exit ( OVERFLOW ) ;
S.top = S.base + S.stacksize ; //重设栈顶指针
S.stacksize += STACKINCREMENT ;//重设当前栈的最大存储容量
}
*S.top++=e; //等价于 *s.top=e; s.top++;
return OK;
}//Push ;Status Pop (SqStack S,SElemType e)
{
// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回ok;否则返回error
if ( S.top==S.base) return ERROR; //栈空,error
e=*--S.top; //等价于 - -s.top; e=*s.top;
return OK;
} //Pop
;3.2 栈的应用举例;一:数制转换;;void conversion ( ) { // 对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 InitStack(S); // 构造空栈 scanf(%d, N); // 输入一个十进制数 while(N) { Push(S,N % 8); // “余数”入栈 N = N/8; // 非零“商”继续运算 }
while (!StackEmpty(s)) {
您可能关注的文档
最近下载
- 吞咽障碍护理的ppt课件.pptx VIP
- PROTEUS-V8中文版介绍.ppt VIP
- 精准落实语文要素五策略 .pdf VIP
- 《第一单元 100以内数加与减(二)——图书角》教学设计-2024-2025学年二年级上册数学北师大版.docx VIP
- 中枢神经系统感染护理查房.ppt VIP
- 标准图集-20S515-钢筋混凝土及砖砌排水检查井.pdf VIP
- 规范、标准整理:TCSUS 17-2021 古道保护利用规划编制导则--------工程交流群加vx:gqq5616.pdf VIP
- 在2024年全市第四季度“12345”热线不满意工单分析研判会上的主持词.docx VIP
- 云南省重大项目办公室 云南省各地州市2015年重大建设项目.doc VIP
- 评标专家评标流程.pdf VIP
文档评论(0)