网站大量收购独家精品文档,联系QQ:2885784924

数据结构04栈与队列.ppt

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构04栈与队列

第四章 栈与队列 4.1 栈 4.1.1 栈的结构特点和操作 4.1.2 栈的表示和操作的实现 4.2 栈的应用举例 4.3 队列 4.3.1 队列的结构特点和操作 4.3.2 队列的表示和操作的实现 4.4 队列的应用举例 4.1 栈 3.1.1 栈的结构特点与操作 栈(stack)是限定只能在一端进行插入和删除操作的线性表。其中允许进行插入和删除的一端称为“栈顶(top)”,另一端称为“栈底(bottom)”。数据元素个数为零的栈是“空栈” 栈是一种“先进后出(LIFO)”的线性表。 例:假设栈中元素以(a1,a2,…,an)的顺序进栈,出栈的第一个元素是an. 4.1.2 栈的基本操作 在应用中,常用的栈的基本操作有: InitStack(s):构造一个空栈S ; DestoryStack(s):销毁一个已存在的栈s; ClearStack(s):将栈s清为空栈; StackLength(s):返回s的元素个数; StackEmpty(S):判断栈S是否为空,为空返回“TRUE”, 否则,返回“FALSE”; 4.1.2 栈的表示和操作的实现 栈有两种表示方法:顺序栈和链栈。 1.顺序栈 用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,并附设一栈顶指针Top指示栈顶元素在顺序栈中的位置。 顺序栈通常用一维数组来实现,并预设一最大数组空间,并且还可以根据需要设一个增补量。 1.顺序栈 栈的顺序存储表示 1.顺序栈 基本操作的实现 初始化操作 void InitStack_Sq (Sqstack S, int maxsize= STACK_INIT_SIZE, int incresize= STACKINCREMENT) { //构造一个最大容量为maxsize的顺序栈 S.elem = new SElemType [maxsize]; S.top =-1; S.stacksize = maxsize; S.incrementsize = incresize; } // Initstack_Sq 复杂度为O(1) 1.顺序栈 取栈顶元素 bool GetTop_Sq(SqStack S,SElemType e) { //若栈不空,用e返回S的栈顶元素,并返回TRUE,否则返回FALSE if(S.top==-1) return FALSE; e=S.elem[S.top]; return TRUE; } 1.顺序栈 将新元素压入栈中的操作: void Push_Sq(SqStack S,SElemType e) {//将新元素e压入栈中作为新的栈顶元素 if(S.top==S.stacksize) incrementStacksize(S);//若栈已满,则重新分配存储空间,并追加S.incrementsize个元素空间。 S.elem[++S.top]=e; }// Push_Sq 1.顺序栈 例:已知顺序栈S如图所示,x=“数据结构”执行push(S,x)后的结果为: 1.顺序栈 删除栈顶元素的操作 bool Pop_Sq(SqStack S,SElemType e) {//若栈不空,则用e返回栈顶元素,并返回TRUE,否则,返回FALSE if(S.top==-1) return FALSE; e=S.elem[S.top--]; return TRUE; }// Pop_Sq 复杂度为O(1) 顺序栈在使用时受到最大空间容量的限制,在当前栈已满并需要加入新的数据元素的情况下,需要追加存储空间。这是顺序栈在使用时的一个弱点。 下面将介绍栈的另一种存储结构——链栈 链栈是用链表结构来表示和实现的栈。链栈的结点结构与链表的结点结构相同,包括数据域和指针域两部分。其中,存储数据元素本身的域称为数据域,存储直接后继元素的存储位置的域称为指针域。 链栈中的多个结点通过指针链接起来,并设一指向栈顶元素的指针——栈顶指针。 链栈的基本操作 void InitStack_L(LinkStack S) {//构造一空栈 S=NULL; }//InitStack_L void push_L(LinkStack S,Elemtype e) {//将新元素e插入链栈S p=new LNode;//分配新结点 p-data=e; p-next=S; S=p;//修改栈顶指针 } push_L 假设一链栈S的状态如图所示;现要插入一元素e作为S的新栈顶元素。 bool Pop_L(LinkStack

文档评论(0)

173****7830 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档