算法与数据结构第4章 栈与 队列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 栈与队列 4.1 栈及其抽象数据类型 4.1.1 基本概念 栈是一种特殊的线性表,它所有的插入和删除都限制在表的同一端进行。 表中允许进行插入、删除操作的一端叫做栈的顶。 表的另一端则叫做栈的底。 当栈中没有元素时,称之为空栈。 栈的插入运算通常称为进栈或入栈, 栈的删除运算通常称为退栈或出栈。 栈又称为后进先出表(Last In First Out表,简称LIFO表)或下推表,如图所示 4.1.2 抽象数据类型 4.2 栈的实现 4.2.1 顺序表示 用顺序的方式表示栈时,栈的类型可定义如下: struct SeqStack { /* 顺序栈类型定义 */ int MAXNUM; /* 栈中最大元素个数 */ int t; /* tMAXNUM,指示栈顶位置,而不是元素个数 */ DataType *s; }; typedef struct SeqStack *PSeqStack; /* 顺序栈的指针类型 */ 用顺序存储结构表示的栈的动态示意图 由于栈是一个动态结构,而数组是静态结构,因此会出现所谓的溢出问题。 当栈中已经有 MAXNUM个元素时,如果再作进栈运算,则会产生溢出,通常称为上溢(Overflow); 而对空栈进行出栈运算时也会产生溢出,通常称为下溢(Underflow)。 基本运算的实现 1. 创建一个空栈 PSeqStack createEmptyStack_seq( int m ) 具体实现与算法2.1类似,需要为栈结构申请空间,不同之处是将栈顶变量赋值为-1。请自己给出。 ? 2. 判断栈是否为空栈 int isEmptyStack_seq( PSeqStack pastack ) 当pastack所指的栈为空栈时,则返回1,否则返回0。 ? 3. 进栈运算 void push_seq( PSeqStack pastack, DataType x ) 往pastack所指的栈中插入(或称推入)一个值为x的元素。 当栈不满时,先修改栈顶变量,将其值加1,然后把元素x放入栈顶变量所指的位置中。 程序实现 ? 4. 出栈运算 void pop_seq( PSeqStack pastack ) 从pastack所指的栈中删除(或称弹出)一个元素。 ? 当栈不空时,通过将栈顶变量减1达到元素删除的目的。 程序实现 5. 取栈顶元素运算 DataType top_seq( PSeqStack pastack ) 当pastack所指的栈不为空栈时,将栈顶元素取出,而栈本身未发生任何变化。 程序实现 4.2.2 链接表示 栈也可以采用链接方式表示,在链接栈中,每个结点的结构可如下定义: struct Node; /* 单链表结点 */ typedef struct Node *PNode; /* 指向结点的指针类型 */ struct Node { /* 单链表结点定义 */ DataType info; PNode link; }; 假设plstack是PLinkStack类型的变量,则plstack-top就是栈顶指针,plstack-top-info是栈顶元素, 运算的实现 1.创建空链接栈 PLinkStack createEmptyStack_link(void) 创建一空链接栈,需要申请链接栈结构(struct LinkStack)空间,将其中top置为NULL,返回该结构的地址。 程序实现 2. 判断栈是否为空栈 int isEmptyStack_link( PLinkStack plstack ) 判断plstack所指的栈是否为空栈,当plstack所指的栈为空栈时,则返回1,否则返回0。 程序实现 ? 3. 进栈运算 void push_link( PLinkStack plstack, DataType x )

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档