28数据结构 队列讲诉.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
队列(queue) 队列是在一端进行插入,在另一端进行删除 队列的操作遵循先进先出的原则 (First- in First- out). 描述队列时要用到两个指针首指针head和尾指针tail. 队列初始化,置空队列(empty) 步骤:1.head=0 2.tail=0 head tail 判断队列是否为空: head==tail 入队列insert(x) 步骤: 1. q[tail]=x 2.tail=tail+1 head tail q[4] q[3] 队列的长度: tail - Head tail q[5]=x q[4] q[3] head 出队列delete(x) 步骤: 1.x=q[head] 2.head=head+1 head tail q[4] q[3] 队列的长度: tail - Head tail q[4] head x 溢出 head tail q[4] q[3] q[5] tail++; tail=tail%n; q[6] 队列的应用 桶排序: 假设有10 个数据(整数),将其按从小到大排序. 桶排序用到的数据有: 11个桶(可用11个一维数组或一个二维数组 实现). 思路: 1. 将要排序的N个数据装入某一个桶中. A 0 1 2 3 4 5 6 7 8 9 49152867298156433572 2.从A桶的下端开始,顺次将A桶中的每一个数据按其个位数字的 值放入相应编号的桶中(从桶的上端放入). A 0 1 2 3 4 5 6 7 8 9 49152867298156433572 81 72 43 1535 56 67 28 4929 3. 将10个桶中的数据按桶编号的顺序(从小到大)由桶的下端再倒 回A桶中. A 0 1 2 3 4 5 6 7 8 9 49292867561535437281 至此,完成对个位数的排序. 4. 从桶的下端开始,再将A桶中的每一个数据按其十位数字的值 放入相应编号的桶中(从桶的上端放入). A 0 1 2 3 4 5 6 7 8 9 49292867561535437281 15 2928 35 4943 56 67 72 81 5.将10个桶中的数据按编号的顺序(从小到大)由桶的下端再倒回A 桶中.此时发现A桶中的数据从下到上已按从小到大顺序排好了.致 此完成对十位数的排序. 6. 如果还有百位数 ,千位数,….,按同样的方法再重复上述操作,直到 A桶中的数据按从小到大排好为至. 在实现桶排序时,采用队列来实现. 【例】集合的前N个元素:编一个程序,按递增次序生成集合M的最小的N个数,M的定义如下: (1)数1属于M; (2)如果X属于M,则Y=2*x+1和Z=3*x+1也属于M; (3)此外再没有别的数属于M。 【分析】 可以用两个队列a和b来存放新产生的数,然后通过比较大小决定是否输出,具体方法如下: (1)令fa和fb分别为队列a和队列b的头指针,它们的尾指针分别为ra和rb。初始时,X=1,fa=fb=ra=rb=1; (2)将2*x+1和3*x+1分别放入队列a和队列b的队尾,尾指针加1。 即:a[r]←2*x+1,b[r]←3*x+1,r←r+1; (3)将队列a和队列b的头结点进行比较,可能有三种情况: (A)a[fa]b[fb] (B)a[fa]=b[fb] (C)a[fa]b[fb] 将比较的小者赋值X,取出数的队列的头指针相应加1。 (4)重复(2),(3)直至取出第N项为止。 #includecstdio using namespace std; int a[1001],b[1001],x=1,fa=0,fb=0,ra=0,rb=0,total=1,n,i; main() { scanf(%d,n); while (total=n) { printf(%d ,x); a[ra++]=2*x+1; b[rb++]=3*x+1; if(a[fa]b[fb])x=b[fb++]; else if(a[fa]b[fb])x=a[fa++]; else { x=a[fa++]; fb++; } total++; } return 0; } 【例】

文档评论(0)

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

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

1亿VIP精品文档

相关文档