数据结构(C语言版)栈和队列技术总结.ppt

  1. 1、本文档共75页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 限定性线性表—栈和队列 ;3.1 栈 ;设S=(a1,a2,…,an)表示栈,则a1为栈底元素,an 为栈顶元素。栈是一种后进先出(Last In First Out)的线性表(简称LIFO结构)。;栈只能对栈顶元素进行插入和删除操作。 例:若输入 A,B,C,D。 可能的输出序列为D,A,C,B (错)、B,A,C,D(对)、 D,C,A,B(错)、B,C,A,D(对)、A,C,B,D (对); ADT Stack{ 数据元素: 可以是任意类型的数据,但必须属于同一个数据对象。  数据关系: 栈中数据元素之间是线性关系。  基本操作:  (1) InitStack(S)  初始条件: S为未初始化的栈。  操作结果: 将S初始化为空栈。  (2) ClearStack(S)  初始条件: 栈S已经存在。  操作结果: 将栈S置成空栈。 ; (3) StackEmpty(S)  初始条件:栈S已经存在。  操作结果:若S为空栈,则函数值为TRUE,否则FALSE (4) Push(S,e)  初始条件:栈S已经存在。  操作结果:在S的顶部插入(亦称压入)元素e;; (5) Pop(S, e)  初始条件:栈S已经存在。  操作结果:删除(亦称弹出)栈S的顶部元素,并用e带回该值。 (6) GetTop(S, e)  初始条件: 栈S已经存在。  操作结果:取栈S的顶部元素。与Pop(S, e)不同之处在于GetTop(S,e)不改变栈顶的位置。 ;3.1.2 栈的表示和实现 ;#define TRUE 1 #define FALSE 0 typedef struct { SElemType * base; SElemType *top; int stacksize; //栈可使用的最大容量 } SqStack; 按初始分配量进行第一次存储分配,base为栈底指针,始终指向栈底。top为栈顶指针,初值指向栈底,每插入一个元素,top增1;每删除一个元素,top减1,top始终在栈顶元素的下一个位置上。 ;图3.2 顺序栈中的进栈和出栈 ;顺序栈基本操作的实现如下: (1) 初始化。 ;(2) 取栈顶元素  Status GetTop(SqStack S, SElemType e){ if (S.top = = S.base) return ERROR; e= * (S.top-1); return OK; };(3) 入栈。  Status Push(SqStack S, SElemType e){ if (S.top - S.base= S.stacksize){ 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; return OK; } ;(4) 出栈  Status Pop(SqStack S, SelemType e){ if( S.top= =S.base) return ERROR; e=*--S.top; return OK; }; 在栈的共享技术中最常用的是两个栈的共享技术:它主要利用了栈“栈底位置不变,而栈顶位置动态变化”的特性。首先为两个栈申请一个共享的一维数组空间S[M],将两个栈的栈底分别放在一维数组的两端,分别是0、M-1。由于两个栈顶动态变化,这样可以形成互补,使得每个栈可用的最大空间与实际使用的需求有关。由此可见,两栈共享比两个栈分别申请M/2的空间利用率高。;图3.3 共享栈 ;2. 链栈 ;3.2 栈的应用举例 ;如(1348)10=(2504)8 ;void conversion() { InitStack(S); scanf(“%d”,N); while(N) { Push(s, N %

文档评论(0)

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

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

1亿VIP精品文档

相关文档