数据结构宗大华陈吉人03堆栈与队列课件教学.pptVIP

数据结构宗大华陈吉人03堆栈与队列课件教学.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-16 循环队列的出队算法。 依照队首指针Qs_front的指示,将循环队列Cq队首元素的值读出,然后删除该元素。算法名为Delete_Cq(),参数为Cq、Cq_rear、Cq_front、Cq_max、x。 3.从循环队列里删除一个元素——出队 Delete_Cq(Cq, Cq_front, Cq_rear, Cq_max, x) { if (Cq_front == Cq_rear) /* 队空 */ printf ( The circular queue is empty!) ; else /* 队非空 */ { Cq_front = (Cq_front +1)%Cq_max ; /* 计算新的出队队位号 */ x = Cq[Cq_front] ; /* 队首元素出队 */ } } 算法3-17 取循环队列首元素算法。 已知循环队列Cq,依照队首指针Qs_front的指示,将队首元素的值读出。算法名为Head_Cq(),参数为Cq、Cq_rear、Cq_front、Cq_max、x。 4.获取循环队列队首元素 Head_Cq(Cq, Cq_front, Cq_rear, Cq_max, x) { if (Cq_front == Cq_rear) /* 队空 */ printf ( The circular queue is empty!) ; else /* 队非空 */ x = Cq[(Cq_front +1)%Cq_max] ; /* 读出队首元素 */ } 当采用链式存储结构实现一个队列时,就称它为“链式队列”。由于队列是线性表的一个特例,因此,链式队列就是链表的一个特例。 3.2.4 队列的链式存储实现 算法3-18 创建一个带头结点的链式队列算法。 创建一个带头结点的链式队列Lq,算法名为Create_Lq(),参数为Lq_front、Lq_rear。 1.创建一个链式队列 Create_Lq (Lq_front, Lq_rear) { ptr = malloc (size) ; /* 申请一个存储结点 */ Lq_front = ptr ; /* 让队首指针Lq_front指向头结点 */ Lq_rear = ptr ; /* 让队尾指针Lq_rear指向头结点 */ ptr-Next = NULL ; /* 将头结点的Next域设置为空 */ } 图3-19 链式队列示意图 算法3-19 链式队列进队算法。 (1)算法描述 已知链式队列Lq。依照队尾指针Lq_rear的指示,往其队尾插入一个值为x的新元素。算法名为Insert_Lq(),参数为Lq_rear、x。 2.往链式队列里插入一个元素——进队 Insert_Lq(Lq_rear, x) { ptr = malloc(size) ; ①ptr-Data = x ; ②ptr-Next = Lq_rear-Next ; ③Lq_rear-Next = ptr ; ④Lq_rear = ptr ; } 图3-20 元素进入链队时的指针操作 算法3-20 链式队列的出队算法。 依照队首指针Lq_front的指示,把链式队列Lq的队首元素读出,然后调整指针,将该元素删除。算法名为Delete_Lq(),参数为Lq_front、Lq_rear、x。 3.从链式队列里删除一个元素——出队 Delete_Lq(Lq_front, Lq_rear, x) { if (Lq_front == Lq_rear) /* 队列空 */ printf (The linked queue is empty!) ; else /* 队列非空 */ { ①ptr = Lq_front-Next ; /* 让ptr指向欲删除的结点 */ ②x = ptr-Data ; /* 结点数据存入变量x */ ③Lq_front-Next = ptr-Next ; /* 删除该结点 */ if (ptr-Next == NULL) /* 队列里只有一个结点 */ ④Lq_rear = Lq_front ; ⑤free (ptr);

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档