ds3.1陆小马功钟浩.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§3.1 栈 栈和栈的实现 §3.1 栈 §3.1 栈 栈及其特点 栈的ADT定义 栈的顺序存储结构——顺序栈 栈的链式存储结构——链栈 1.栈及其特点(1) (1)什么是栈? 栈(Stack)是一种特殊的线性表。 S = (a1, a2, … , an) 仅在表尾进行插入和删除。 表尾称为栈顶(top),表头称为栈底(bottom)。 插入元素称为入栈(push)。 删除元素称为出栈(pop)。 1.栈及其特点(2) (2)栈的操作有何特点? 最先出栈的必定是最后进栈的栈顶元素。 后进先出(LIFO) 2.栈的ADT定义 ADT Stack { 数据对象: 数据关系: 基本操作: InitStack ( S ) 构造空栈S DestroyStack ( S ) 销毁栈S ClearStack ( S ) 清空栈S StackEmpty ( S ) 判断栈S是否为空 StackLength ( S ) 栈中元素个数 GetTop ( S, e ) 取栈顶元素 Push ( S, e ) 入栈 Pop ( S, e ) 出栈 StackTraverse ( S, visit ) 遍历栈 } ADT Stack; 3.栈的顺序存储结构——顺序栈 (1)顺序栈的类型定义 (2)顺序栈的基本形态 (3)顺序栈基本操作的实现 (4)顺序栈与顺序表 (1)顺序栈的类型定义 //顺序栈的最大容量 const int MAXSIZE = 256; //可根据实际调整 //顺序栈的类型定义 struct SqStack { ElemType elem [ MAXSIZE ]; int top; }; (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); } 3.栈的顺序存储结构——顺序栈 总结: 应将顺序表的表尾作为栈顶。 所有操作(除了遍历)的时间复杂度都是:O(1)。 4.栈的链式

文档评论(0)

陆小马公主号 + 关注
实名认证
内容提供者

陆小马 功钟浩 分享资源

1亿VIP精品文档

相关文档