- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 栈和队列
一、栈 1.什么是栈 栈是限定在一端进行插入与删除的线性表。 在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。 栈是按照“先进后出”的原则组织数据的。 通常用指针top 来指示栈顶的位置,用指针bottom 指向栈底。 往栈中插入一个元素称为入栈运算, 从栈中删除一个元素称为退栈运算。 建立一个空栈: using namespace std; template typename T void init_Stack(T *s, int m, int top) { s=new T[m];//动态申请容量为m的存储空间 top=0;//栈顶指针置0 return; } 入栈操作: ① 首先判断栈顶指针是否已经指向存储空间的最后一个位置,如果是,则说明栈空间已满,不可能再进行入栈操作。这种情况称为栈“上溢”错误,算法结束。 ②然后将栈顶指针进一(top加一)。 ③最后将新元素x插入到栈顶指针指向的位置。 using namespace std; template typename T void push(T *s, int m, int top, T x) { if (top==m) {cout “Stack-overflow”endl;return;} top= top+1; s[top-1]=x; return; } 退栈运算: ①首先判断栈顶指针是否为0,如果是,则说明栈空,不可能进行退栈操作。这种情况称为“下溢”错误,算法结束。 ②然后将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量。 ③最后将栈顶指针退一(top减一) using namespace std; template typename T T pop(T *s,int m, int top) { T y; if (top==0) { cout“stack-underflow”;return;} y=s[top-1]; top=top-1; return (y); } 读栈顶元素 ① 首先判断栈顶指针是否为0,如果是,则说明栈空,读不到栈顶元素,算法结束。 ②然后将栈顶元素赋给指定的变量y。 using namespace std; template typename T T top(T *s,int m,int top) { T y; if (top==0) {cout“stack empty”endl;return;} y=s[top-1]; return(y); } 例2.10 建立容量为10的空栈,依次将50,60,70,80,90,100入栈,然后输出栈顶指针与栈中的元素,再输出栈顶元素,输出连续3次退栈的元素,最后再次输出栈顶指针与栈中的元素。 4.表达式的计算 计算机系统在具体处理表达式前,首先设置以下两个栈: 一是运算符栈,用于在表达式处理过程中存放运算符。在开始时,运算符栈中先压入一个表达式结束符“;”。 二是操作数栈,用于在表达式处理过程中存放操作数。 然后从左到右依次读出表达式中的各个符号(运算符或操作数),每读出一个符号按以下原则进行处理: (1)若读出的是操作数,则将该操作数压入操作数栈,并依次读下一个符号。 (2)若读出的是运算符,则作进一步判断: ①若读出运算符的优先级大于运算符栈栈顶运算符的优 先级,或者是“(”,则将读出的运算符压入运算符栈,并依次读下一个符号。 ②若读出的是表达式结束符“;”,且运算符栈栈顶的运算符也是表达式结束符“;”,则表达式处理结束,最后的计算结果在操作数栈的栈顶位置。 ③若读出运算符的优先级不大于运算符栈栈顶运算符的优先级,则从操作数栈连续退出两个操作数,并从运算符栈退出一个运算符,然后作相应的运算,并将运算结果压入操作数栈。 ④若读出的为右括弧“)”,且运算符栈栈顶运算符为左括弧,则说明这对括号内的运算全部处理完,从运算符栈栈顶退出左括弧,然后依次读下一个符号。 2. 队列及其应用 什么是队列? 队列是只允许在一端进行插入,而在另一端进行删除的线性表。 允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为排头(也称为队头),通常也用一个排头指针(front)指向排头元素的前一个位置。 队列——“先进先出” 循环队列及其运算 循环队列:将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。 在循环队列中,用队尾指针rear指向队列中的队尾元素
文档评论(0)