056312409数据结构(C语言版)(夏燕张兴科)--pdf课件--第4章 队列.pptVIP

056312409数据结构(C语言版)(夏燕张兴科)--pdf课件--第4章 队列.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文档。上传文档
查看更多
⑷ 出队   当链队不空时,从队列中删除队头元素。 int OutQueue_Link(LinkQueue *q,Elemtype *x) {Queuenode *p; if (isEmpty_LinkQueue(q)) { printf(“queue is empty”); return(0); } else { p=q-front-next; q-front-next=p-next; *x=p-data; free(p); if(q-front-next==NULL) q-rear=q-front;    /*只有一个元素时,出队后队空*/ return(1); } } ● 4.1.4 队列的链式存储结构 ⑸ 取队头元素   当链队不空时,取出队头元素赋值给x带回调用函数。 int front_LinkQueue(LinkQueue *q,Elemtype *x) { if (isEmpty_LinkQueue(q)) { printf(“queue is empty!\n”); return(0);} else { *x=q-front-next-data; return(1); } } ● 4.1.4 队列的链式存储结构 ● 4.2 队列的应用 例1 在计算机系统中,为了解决两个设备之间速度不匹配的问题,通常在内存中设置一个缓冲区,缓冲区是一块连续的存储空间,为了充分利用缓冲区的存储空间,将缓冲区设计成循环队列结构,并为循环队列结构的缓冲区设置一个队首指针和队尾指针,初始时循环队列为空。计算机每处理完一批数据就将其加入到循环队列的队尾;而打印机每处理完一个打印任务,就从循环队列的队首取出下一个要打印的数据。由于打印机的速度比较慢,来不及打印的数据就在缓冲区中排队等待。这就是队列在计算机系统内部的一个比较典型的应用。 例2 队列在程序设计中的一个典型应用例子是作业排队问题。 例如,在一个局域网上有一台共享的网络打印机,网上每个用户都可以将数据发送给网络打印机进行输出。为了保证不丢失数据,操作系统为网络的打印机生成一个“作业队列”,每个申请输出的“作业”应按先来后到的顺序排队,打印机从作业队列中逐个提取作业进行打印。 ● 4.2 队列的应用 例3 队列管理模拟算法。 算法设计   队列采用带头结点的链队,当输入满足一定条件时元素出队。 队列管理模拟算法采用如下管理模式: ?初始化为空队列。 ?当输入奇数时,奇数从队列尾入队。 ?当输入偶数时,队列头指针指向的奇数出队列。 ?当输入0时,退出算法。 ?每当输入一个整数,显示操作后队列的值。 ● 4.2 队列的应用 void outqueue(LinkQueue *q)    /*显示队列q中的值*/ {LinkQueue *p; p=q-front; printf(“queue:”); while (p!=q-rear) {p=p-next; printf(“%d”,p-data); } printf(“\n”); } main() {LinkQueue lq,*p; int j; p=lq; Init_LinkQueue(p); printf(“input a integer:”); scanf(“%d”,j); while (j!=0) { if (j%2==1) enQueue_Link(p,j); else OutQueue_Link(p,j); outqueue(p); printf(“input a integer:”); scanf(“%d”,j); } } ● 4.2 队列的应用 例4 循环队列应用举例   编写一个打印二项式系数表(即杨辉三角)的算法。 (杨辉三角形的每一行是(x+y)n的展开式的各项的系数) 要求输出结果: 1:       1 2:        1 1 3:     1 2 1 4:    1 3 3 1 5:   1  4 

文档评论(0)

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

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

1亿VIP精品文档

相关文档