第10章 栈和队列 计算机软件技术知识基础教程 .pptVIP

第10章 栈和队列 计算机软件技术知识基础教程 .ppt

  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文档。上传文档
查看更多
第10章 栈和队列 计算机软件技术知识基础教程 .ppt

10.1 栈 10.2 栈的应用 10.3 队列 10.4 队列应用举例 ;第10章 栈 和 队 列;图10.1 栈的示意图; 从图10.1中可以看出,进栈是把数据元素放在栈顶,即最后进栈的数据元素在栈顶,而出栈是把栈顶的数据元素删除。因此,对于栈来说,最后进栈的数据元素最先出栈,故把栈称为后进先出(LIFO-Last In First Out)的数据结构,或先进后出(FILO-First In Last Out)的数据结构。 栈的常用运算有以下五种: (1) 置空栈——SetNull(S),完成对栈的初始化。 (2) 判断栈是否为空——Empty(S),若栈S为空,则返回真;否则,返回假。; (3) 进栈——Push(S,e),在栈S的栈顶插入数据元素e。 (4) 出栈——Pop(S),删除栈S的栈顶数据元素,并把出栈数据元素返回。 (5) 取栈顶元素——GetTop(S),取栈S的栈顶数据元素,并把数据元素返回。该操作完成后,栈的状态不变。; (2) 判断栈是否为空:在进行出栈操作时,首先必须判断栈不为空,否则会出错。 int EmptyS(struct Stack *s) { if (S-Top=0) return (0); else return (1); } /* EmptyS */ (3) 进栈:将数据元素E插入栈顶。;struct Stack *PushS(struct Stack *S, datatype E) { if (S-Top=maxsize-1) { printf (Stack Overflow); /? 上溢现象。?/ return (NULL); } else { S-Top++; S-elements[S-Top]=E; } return (s); } /* PushS*/; (4) 出栈:首先判断栈是否为空,若空则表示下溢,否则删除栈顶数据元素。; temp=(datatype *)malloc(sizeof (datatype)); *temp= S-elements[S-Top+1]; return (temp); } } /* PopS */; (5) 取栈顶元素:只把栈顶元素的值取出,而不调整栈顶指针Top的值。 ; *temp= S-elements[S-Top]; return?(temp); } } /* GetTopS */ 在前面的栈运算中,进栈运算采用Top指针加1后再插入数据元素,若采用先插入数据元素再使Top指针加1,那么以上五种运算该如何实现呢?请读者自行写出算法。 ; 对于顺序栈来说,其最大缺点是:当栈的容量不固定时,必须设置栈可容纳最多的数据元素作为栈的容量,这样就会浪费很多存储空间,也可能产生上溢现象。采用链式存储结构就不会产生类似的问题。 栈的链式存储结构称为链栈。它是运算受限的单链表,其插入和删除操作仅在表头进行。链栈定义如下:; 图10.3是链栈示意图。栈顶是top指针,它惟一地确定一个链栈。当top等于NULL时,该链栈为空栈。 下面仅给出链栈的出栈和进栈运算,其他运算请读者自行完成。;图10.3 链栈的示意图;datatype PopL(struct Node *S) /* 出栈 */ { datatype *X; if (S==NULL) { printf (Stack is underflow); return (NULL); } else { X=(datatype *)malloc(sizeof (datatype));; * X=S-element; S=S-next; return (X); } } /* PopL */ ;10.2 栈 的 应 用;int Fib (int n) { int fib; if (n==0) fib=0; else if (n==1) fib=1; else fib=Fib(n-1)+Fib(n-2); return (fib); } /* Fib */

您可能关注的文档

文档评论(0)

youngyu0329 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档