数据结构第2版宗大华陈吉人数据结构课件-3课件教学.pptVIP

数据结构第2版宗大华陈吉人数据结构课件-3课件教学.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文档。上传文档
查看更多
带头结点的链式队列出队算法 算法3-20 算法描述 (1) 算法分析 (2) Delete_Lq(Lq_front, Lq_rear, x) { if (Lq_front == Lq_rear) printf (The linked queue is empty!) ; else { ①ptr = Lq_front-Next ; ②x = ptr-Data ; ③Lq_front-Next = ptr-Next ; if (ptr-Next == NULL) ④Lq_rear = Lq_front ; ⑤free (ptr); } } . 出队操作时先要判断队列是否为空,判断链式队列为空的条件是: Lq_front == Lq_rear . 出队操作中,需注意原队列里只有一个元素的情形,即当条件: ptr-Next == NULL 成立时,删除该元素后要调整Lq_rear,让它指向队列的头结点,否则它就 “悬空”了。 下图所示为原先队列里只有一个元素a1时,删除它的①~⑤步操作过程示意。 . 链式队列Lq Lq_front : Lq_rear: (头结点) ∧ a1 ∧ ③ Lq_front-Next=ptr-Next ① ptr=Lq_front-Next x ④ Lq_rear=Lq_front × ptr ② x=ptr-Data ⑤ free(ptr) × 在队列里只有一个数据结点时,做出队操作就要对指针Lq_rear进行调整,以便让它指向头结点。可用改进的算法Delete_Lq1(),来避免队尾指针的调整。 算法讨论 (3) . Delete_Lq1(Lq_front, Lq_rear, x) { if (Lq_front == Lq_rear) printf (The linked queue is empty!) ; else { ①ptr = Lq_front ; ②Lq_front = Lq_front-Next ; ③free (ptr); ④x = Lq_front-Data ; } } 该算法只修改链式队列首指针Lq_front,不动尾指针Lq_rear。具体地,出队时删除头结点,把要出队的队首元素结点改为头结点。这样一来,即使原来队列里只有一个数据元素,也不用修改队尾指针Lq_rear。 . 下图是链式队列里只有一个数据结点时,出队操作的实施步骤 。 . 下图是一般链式队列出队操作的实施步骤 。 . Lq Lq_front : Lq_rear: (新的头结点) ∧ x ① ptr=Lq_front ② Lq_front=Lq_front-Next ③ free(ptr) ptr ④ x=Lq_front-Data × a1 Lq Lq_front : Lq_rear: (新的头结点) x ① ptr=Lq_front ② Lq_front=Lq_front-Next ③ free(ptr) ptr ④ x=Lq_front-Data × a1 a2 ∧ a3 (原头结点) (原头结点) 所谓“算术表达式”,是指用算术运算符将操作数连接起来组成的式子。算术表达式求值,是程序设计语言编译时必须解决的一个基本问题。 3.3.1 在算术表达式求值中使用堆栈 . 算术表达式的概念 1. . 常见的算术表达式的特点是运算符被置于两个操作数的中间,按“先括号内后括号外”、“先乘除后加减”、“同级运算先左后右”的运算规则进行求值。这种“运算符被置于两个操作数中间”形式的算术表达式,称之为是“中缀表达式”。 . 算术表达式还有前缀和后缀两种形式。如果将运算符放于两个操作数的前面,那就是“前缀表达式”。如果将运算符放于两个操作数的后面,那就是“后缀表达式”。 后缀表达式的特点是没有括号,没有运算符间的优先级,计算完全按照运算符出现的先后次序进行。因此,在语言编译系统里,总是先把中缀表达式转为后缀表达式,然后对后缀表达式进行一遍扫描,求得其结果。 . 我们不去探究如何利用堆栈把中缀表达式转换为后缀表达式,然后再求表达式值的问题。我们在此只是简单地介绍在中缀表达式的基础上,如何通过堆栈能够求得它的值。 . 在栈开始工作前,往op栈底放一个特殊的运算符,比如“#”,规定它的优先级为最低,以便扫描表达式时,遇到的第1个运算符可以顺利进

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档