第六讲栈的定义及实现答案.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
滨州学院计算机科学技术系 第三章 栈和队列 栈的定义 栈的表示 栈的实现 本讲内容 一、栈的基本概念及特点 二、栈的ADT定义 三、栈类型的实现 栈 一、栈的基本概念及其特点(1) 1. 什么是栈? 栈(Stack)是一种特殊的线性表。 S = (a1, a2, … , an) 仅在表尾进行插入和删除。 表尾称为栈顶(top),表头称为栈底(bottom)。 插入元素称为入栈(push)。 删除元素称为出栈(pop)。 1. 栈的顺序存储实现——顺序栈 (1)顺序栈的类型定义 (2)顺序栈的基本形态 (3)顺序栈基本操作的实现 (4)顺序栈与顺序表 (1)顺序栈的类型定义 //顺序栈的最大容量 const int MAXSIZE = 256; //可根据实际调整 //顺序栈的类型定义 typedef struct SqStack { ElemType elem [ MAXSIZE ]; int top; } SqStack; (2)顺序栈的基本形态 (2)顺序栈的基本形态 ① 栈空 条件:S.top==0 不能出栈,不能取栈顶元素 ② 栈满 条件:S.top==MAXSIZE 不能入栈 ③ 栈非空(非满) (3)顺序栈基本操作的实现 构造空栈S Status InitStack ( SqStack S ) { S.top = 0; return OK; } (3)顺序栈基本操作的实现 判断栈是否为空 Status StackEmpty ( SqStack S ) { return (S.top==0); } 栈的长度 int StackLength ( SqStack S ) { return S.top; } (3)顺序栈基本操作的实现 入栈 Status Push ( SqStack S, ElemType e ) { //若栈满则返回错误 if ( S.top==MAXSIZE ) return ERROR; //否则在栈顶插入元素e S.elem[S.top] = e; S.top++; //新的栈顶 return OK; } (3)顺序栈基本操作的实现 出栈 Status Pop ( SqStack S, ElemType e ) { //若栈空则返回错误 if ( S.top==0 ) return ERROR; //删除栈顶元素 e = S.elem[S.top-1]; //取出栈顶元素 S.top--; //新的栈顶 return OK; } (3)顺序栈基本操作的实现 访问栈顶元素 Status GetTop ( SqStack S, ElemType e ) { //若栈空则返回错误 if ( S.top==0 ) return ERROR; //取出栈顶元素 e = S.elem[S.top-1]; return OK; } (4)顺序栈与顺序表 利用顺序表可以实现顺序栈。 typedef SqList SqStack; 构造空栈 Status InitStack ( SqStack S ) { return InitList(S); } (4)顺序栈与顺序表 入栈 Status Push ( SqStack S, ElemType e ) { return ListInsert(S, ListLength(S)+1, e); } 出栈 Status Pop ( SqStack S, ElemType e ) { return ListDelete(S, ListLength(S), e); } (4)顺序栈与顺序表 访问栈顶元素 Status GetTop ( SqStack S, ElemType e ) { return GetElem(S, ListLength(S), e); } 1.栈的顺序存储实现——顺序栈 总结: 将顺序表的表尾作为栈顶。 所有操作(除了遍历)的时间复杂度都是:O(1)。 2.栈的链式存储实现——链栈 (1)链栈结点结构的定义 (2)链栈的基本形态 (3)基本操作的实现 (4)链栈和链表 (1)链栈结点结构的定义 链栈结点结构与单链表相同。 链栈用单链表实现 (2)链栈的基本形态 有头结点的情况 非空表 空表 无头结点的情况 非空表 空表 (3)基本操作的实现 将链表的表头视为栈顶,操作起来效率高。 下面以不带头结点的情况为例,实现基本操作。 //链栈类型定义 typedef LinkList LinkStack; (3)基本操作的实现 入栈 Status Push ( LinkStack S, ElemType e ) { //建立结点 p =(LinkSt

文档评论(0)

a5522235 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档