数据结构:循环队列(C语言实现).doc
《数据结构:循环队列(C语言实现).doc》由会员分享,可在线阅读,更多相关《数据结构:循环队列(C语言实现).doc(6页珍藏版)》请在咨信网上搜索。
(完整word)数据结构:循环队列(C语言实现) 数据结构:循环队列(C语言实现) 生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构。队列分为链式队列和静态队列;静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。这里讲的是循环队列,首先我们必须明白下面几个问题 一、循环队列的基础知识 1。循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2。循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零; (2)当队列不为空时,front指向队列的第一个元素,rear指向队列最后一个元素的下一个位置; (3)当队列为空时,front与rear的值相等,但不一定为零; 3.循环队列入队的伪算法 (1)把值存在rear所在的位置; (2)rear=(rear+1)%maxsize ,其中maxsize代表数组的长度; 程序代码: [cpp] view plaincopy 1. bool Enqueue(PQUEUE Q, int val) 2. { 3. if(FullQueue(Q)) 4. return false; 5. else 6. { 7. Q-〉pBase[Q—〉rear]=val; 8. Q—>rear=(Q—〉rear+1)%Q-〉maxsize; 9. return true; 10. } 11. } 4。循环队列出队的伪算法 (1)先保存出队的值; (2)front=(front+1)%maxsize ,其中maxsize代表数组的长度; 程序代码: [cpp] view plaincopy 1. bool Dequeue(PQUEUE Q, int *val) 2. { 3. if(EmptyQueue(Q)) 4. { 5. return false; 6. } 7. else 8. { 9. *val=Q—>pBase[Q—〉front]; 10. Q—>front=(Q-〉front+1)%Q—>maxsize; 11. return true; 12. } 13. } 5。如何判断循环队列是否为空 if(front==rear) 队列空; else 队列不空; [cpp] view plaincopy 1. bool EmptyQueue(PQUEUE Q) 2. { 3. if(Q—>front==Q-〉rear) //判断是否为空 4. return true; 5. else 6. return false; 7. } 6.如何判断循环队列是否为满 这个问题比较复杂,假设数组的存数空间为7,此时已经存放1,a,5,7,22,90六个元素了,如果在往数组中添加一个元素,则rear=front;此时,队列满与队列空的判断条件front=rear相同,这样的话我们就不能判断队列到底是空还是满了; 解决这个问题有两个办法:一是增加一个参数,用来记录数组中当前元素的个数;第二个办法是,少用一个存储空间,也就是数组的最后一个存数空间不用,当(rear+1)%maxsiz=front时,队列满; [cpp] view plaincopy 1. bool FullQueue(PQUEUE Q) 2. { 3. if(Q-〉front==(Q-〉rear+1)%Q—>maxsize) //判断循环链表是否满,留一个预留空间不用 4. return true; 5. else 6. return false; 7. } 附录: queue。h文件代码: [cpp] view plaincopy 1. #ifndef __QUEUE_H_ 2. #define __QUEUE_H_ 3. typedef struct queue 4. { 5. int *pBase; 6. int front; //指向队列第一个元素 7. int rear; //指向队列最后一个元素的下一个元素 8. int maxsize; //循环队列的最大存储空间 9. }QUEUE,*PQUEUE; 10. 11. void CreateQueue(PQUEUE Q,int maxsize); 12. void TraverseQueue(PQUEUE Q); 13. bool FullQueue(PQUEUE Q); 14. bool EmptyQueue(PQUEUE Q); 15. bool Enqueue(PQUEUE Q, int val); 16. bool Dequeue(PQUEUE Q, int *val); 17. #endif queue。c文件代码: [cpp] view plaincopy 1. #include<stdio。h〉 2. #include<stdlib。h〉 3. #include”malloc.h" 4. #include"queue.h" 5. /*********************************************** 6. Function: Create a empty stack; 7. ************************************************/ 8. void CreateQueue(PQUEUE Q,int maxsize) 9. { 10. Q->pBase=(int *)malloc(sizeof(int)*maxsize); 11. if(NULL==Q—〉pBase) 12. { 13. printf(”Memory allocation failure”); 14. exit(-1); //退出程序 15. } 16. Q->front=0; //初始化参数 17. Q->rear=0; 18. Q->maxsize=maxsize; 19. } 20. /*********************************************** 21. Function: Print the stack element; 22. ************************************************/ 23. void TraverseQueue(PQUEUE Q) 24. { 25. int i=Q—〉front; 26. printf("队中的元素是:\n"); 27. while(i%Q—>maxsize!=Q—〉rear) 28. { 29. printf(”%d ”,Q—〉pBase[i]); 30. i++; 31. } 32. printf("\n”); 33. } 34. bool FullQueue(PQUEUE Q) 35. { 36. if(Q—〉front==(Q->rear+1)%Q—〉maxsize) //判断循环链表是否满,留一个预留空间不用 37. return true; 38. else 39. return false; 40. } 41. bool EmptyQueue(PQUEUE Q) 42. { 43. if(Q-〉front==Q-〉rear) //判断是否为空 44. return true; 45. else 46. return false; 47. } 48. bool Enqueue(PQUEUE Q, int val) 49. { 50. if(FullQueue(Q)) 51. return false; 52. else 53. { 54. Q—〉pBase[Q—>rear]=val; 55. Q—〉rear=(Q->rear+1)%Q-〉maxsize; 56. return true; 57. } 58. } 59. 60. bool Dequeue(PQUEUE Q, int *val) 61. { 62. if(EmptyQueue(Q)) 63. { 64. return false; 65. } 66. else 67. { 68. *val=Q—>pBase[Q—〉front]; 69. Q-〉front=(Q—>front+1)%Q-〉maxsize; 70. return true; 71. } 72. }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 循环 队列 语言 实现
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文