栈和队列的抽象数据类型定义 栈和队列的表示和实现.ppt

栈和队列的抽象数据类型定义 栈和队列的表示和实现.ppt

  1. 1、本文档共93页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(3)循环队列的基本操作实现 a.初始化 status initqueue(queuetype q) {q.front=q.rear=0; return OK;} b. 队列长度 int queuelength(queuetype q) {return (q.rear-q.front+MaxSize)%MaxSize; } 三、队列的表示和实现 3.3 队列 c.入队 status enqueue(queuetype q,elemtype e) { if((q.reae+1)%MaxSize==q.front) return ERROR; q.queue[q.rear]=e; q.rear=(q.rear+1)%MaxSize; return OK;} } 三、队列的表示和实现 3.3 队列 d.出队 status dequeue(queuetype q,elemtype e) { if (q.front==q.rear) return ERROR; e=q.queue[q.front]; q.front=(q.front+1)%MaxSize; return OK; } 三、队列的表示和实现 3.3 队列 4.队列的链式表示和实现 (1)用链式表示的队列简称为链队列。链队列实际是一个带有头指针(front)和尾指针(rear)的单链表。 三、队列的表示和实现 3.3 队列 (2)后缀表达式法 中缀表达式——表达式的运算符在操作数的中间。 后缀算术表达式(逆波兰式)——将运算符置两个操作数后面的算术表达式。 前缀表达式(波兰式)又称波兰式,与后缀表达式相反。 例: 将3*(x+y)/(1-x)转换为后缀表达式 3xy+*1x-/ 方法:{ [ 3 * ( x + y ) + ] * / ( 1 – x ) - } / 3xy+*1x-/ 二、表达式求值 3.2 栈的应用举例 ①中缀表达式转换成后缀表达式 算法: 设一个数组str存放中缀表达式,一个数组exp存放转换后的后缀表达式,栈s作为中间过程中不能立即送入数组的运算符。 对于运算符也有一个优先级的比较,这同(1)是相同的。 设先后出现的两个运算符为p1和p2。 a.首先在栈s中压入”#”,然后从数组str中的第一个字符 开始扫描; b.当字符是数字字符时,将从该字符开始的一组数字符及 附加空格,依次送入数组exp中。 二、表达式求值 3.2 栈的应用举例 c.当字符是运算符p2时,则检查p2与s栈顶元素p1之间的关、 系,并作以下处理: 若p2p1,则将运算符p2压入s; 若p2p1,则将p1弹出,并送入数组exp中,然后p2继续与新的栈顶中的运算符p1比较; 若p2为右括号,则栈顶必然有一左括号,将栈顶左括号弹出(此过程正是删除一对括号),然后继续扫描下一个字符; d.重复上述过程b~c,直到扫描到str数组中的算符“#”为止。 运算结束后,exp数组中存放的是转换后的后缀表达式。 二、表达式求值 3.2 栈的应用举例 以3*(x+y)/(1-x)为例,说明转换过程。 # ) x - (1 / ) y + x ( * 3 3 3 # str # * ( 3 x 3 x y # * ( + # * ( + 3 x y exp # * s 3 x y + # / ( # / ( - 3 x y + * 1 # / ( - 3 x y + * 1 x 3 x y + * 1 x *( + + ) / ( * / - ) # - / 二、表达式求值 3.2 栈的应用举例 ②后缀表达式求值 将转换后的后缀表达式运算求出结果。 接上,exp中存放带“#”的后缀表达式,栈s存放参与运算 的操作数、中间结果和最后结果。 从数组的第一个字符开始扫描。 若遇到数字字符,则将以该字符开始的一组数字(直到遇 到空格为止)转换成对应的数值(即一个操作数),再压入 栈s。 若遇到的是运算符,则从栈s的栈顶依次弹出两个操作数,进行相应的运算,再将其运算结果压入栈s。 继续扫描exp中的下一个字符,重复上述两个步骤,直到 扫描到exp中的“#”为止。此时栈s中的栈顶值就是后缀 表达式的值。 二、表达式求值 3.2 栈的应用举例 / - 1 2 * + 7 5 3 exp 3 5 7 7+5=12 3 12 12*3=36 36 2 1 2-1=1 36 1 36/1=36 二、表达式求值 3.2 栈的应用举例

文档评论(0)

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

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

1亿VIP精品文档

相关文档