亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

如何實現循環隊列

2020-05-23 14:17:25
字體:
來源:轉載
供稿:網友

本文主要介紹了C語言循環隊列的實現,對于數據結構與算法的研究有所幫助,需要的朋友可以參考下

生活中有很多隊列的影子,比如打飯排隊,買火車票排隊問題等,可以說與時間相關的問題,一般都會涉及到隊列問題;從生活中,可以抽象出隊列的概念,隊列就是一個能夠實現“先進先出”的存儲結構。隊列分為鏈式隊列和靜態隊列;靜態隊列一般用數組來實現,但此時的隊列必須是循環隊列,否則會造成巨大的內存浪費;鏈式隊列是用鏈表來實現隊列的。

 

 
  1. #ifndef SQQUEUE_H_INCLUDED  
  2. #define SQQUEUE_H_INCLUDED /* 防止重復包含 */  
  3.  
  4. //////////////////////////////////////////  
  5. //包含頭文件  
  6. #include <stdlib.h>  
  7. #include "ds.h" // OK, Status 等定義  
  8.  
  9. //數據元素的類型(缺省使用int型)  
  10. #ifndef ElemType  
  11. #define ElemType int  
  12. #define USE_DEFAULT_ELEMTYPE /* 使用缺省類型的標志 */  
  13. #endif //ElemType  
  14.  
  15. //////////////////////////////////////////  
  16. //循環隊列的存儲結構  
  17.  
  18. #define MAXQSIZE 500/* 循環隊列的最大容量 */  
  19. typedef struct {  
  20. /* TODO (#1#): 這里完成循環隊列的類型定義 */ 
  21. ElemType *base;  
  22. int front;  
  23. int rear;  
  24. //....................................  
  25. } SqQueue;  
  26.  
  27.  
  28. //////////////////////////////////////////  
  29. //循環隊列的基本操作  
  30.  
  31. //構造一個空隊列Q  
  32. Status InitQueue(SqQueue &Q)  
  33. {  
  34. /* TODO (#2#): 構造空隊列 */ 
  35. Q.base=(ElemType*)malloc(MAXQSIZE *sizeof(ElemType));  
  36. if(!Q.base)exit(OVERFLOW);  
  37. QQ.front=Q.rear =0;  
  38. return OK; //TODO: 替換這行代碼,以下同  
  39. //....................................  
  40. }  
  41.  
  42. //銷毀隊列Q  
  43. // 前提:隊列Q已存在  
  44. Status DestroyQueue(SqQueue &Q)  
  45. {  
  46. /* TODO (#3#): 銷毀隊列 */ 
  47. free(Q.base);  
  48. Q.base=NULL;  
  49. Q.front=0;  
  50. Q.rear=0;  
  51. return OK;  
  52. //....................................  
  53. }  
  54.  
  55. //將隊列Q清為空隊列  
  56. // 前提:隊列Q已存在  
  57. Status ClearQueue(SqQueue &Q)  
  58. {  
  59. /* TODO (#4#): 清空隊列 */ 
  60. Q.base=0;  
  61. Q.rear=0;  
  62. return OK;  
  63. //....................................  
  64. }  
  65.  
  66. //若隊列Q為空,則返回TRUE,否則FALSE  
  67. // 前提:隊列Q已存在  
  68. Status QueueEmpty(SqQueue Q)  
  69. {  
  70. /* TODO (#5#): 判斷隊列是否為空 */ 
  71. if(Q.front==Q.rear)  
  72. return OK;  
  73. else 
  74. return ERROR;  
  75. //....................................  
  76. }  
  77.  
  78. //返回隊列Q的元素個數,即隊列長度  
  79. // 前提:隊列Q已存在  
  80. int QueueLength(SqQueue Q)  
  81. {  
  82. /* TODO (#6#): 返回隊列長度 */ 
  83. return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;  
  84. //....................................  
  85. }  
  86.  
  87. //取隊列Q頭元素用e返回  
  88. // 前提:隊列Q存在且非空  
  89. Status GetHead(SqQueue Q,ElemType &e)  
  90. {  
  91. /* TODO (#7#): 取隊頭元素存入e */ 
  92. if(Q.rear==Q.front)  
  93. return ERROR;  
  94. e=Q.base[Q.front];  
  95. //e=*(Q.base+Q.front);  
  96. return OK;//返回操作狀態(成功:OK,失敗:ERROR)  
  97. //....................................  
  98. }  
  99.  
  100. //插入元素e作為隊列Q的新的隊尾元素  
  101. // 前提:隊列Q存在且未滿  
  102. Status EnQueue(SqQueue &Q, ElemType e)  
  103. {  
  104. /* TODO (#8#): 元素e入隊列 */ 
  105. if((Q.rear+1)%MAXQSIZE==Q.front)  
  106. return ERROR;  
  107. //e=*(Q.base +Q.rear);  
  108. Q.base[Q.rear]=e;  
  109. Q.rear=(Q.rear+1)%MAXQSIZE;  
  110. return OK;//返回操作狀態(成功:OK,失敗:ERROR)  
  111. //....................................  
  112. }  
  113.  
  114. //刪除隊列Q的隊頭元素,并用e返回  
  115. // 前提:隊列Q存在且非空  
  116. Status DeQueue(SqQueue &Q, ElemType e)  
  117. {  
  118. /* TODO (#9#): 出隊列存入e */ 
  119. if(Q.front==Q.rear)  
  120. return ERROR;  
  121. //e=*(Q.base+Q.front);  
  122. e=Q.base[Q.front];  
  123. Q.front=(Q.front+1)%MAXQSIZE;  
  124. return OK;//返回操作狀態(成功:OK,失敗:ERROR)  
  125. //....................................  
  126. }  
  127.  
  128. //////////////////////////////////////////  
  129.  
  130.  
  131. //TODO: 定義好 SqQueue 類型后使用 QueueView 函數  
  132. /****** //TODO: 刪除此行以便使用QueueView()  
  133. #include <stdio.h>  
  134. //查看隊列狀態(調試用)  
  135. void QueueView(SqQueue Q)  
  136.  
  137. extern void PrintElem(ElemType e);//打印數據用  
  138. int i=0;  
  139. if(Q.front<0||Q.front>=MAXQSIZE||Q.rear<0||Q.rear>=MAXQSIZE){  
  140. printf("隊列未初始化/n");  
  141. return ;  
  142.  
  143. printf("---Queue View---/n");  
  144. printf("front=%d , rear=%d/n", Q.front, Q.rear);  
  145. if(Q.rear>=Q.front) {  
  146. printf("..... ....../n");  
  147. for(i=Q.front; i<Q.rear; i++) {  
  148. printf("%5d/t", i);  
  149. PrintElem(Q.base[i]);  
  150. printf("/n");  
  151.  
  152. if(i<MAXQSIZE) printf("..... ....../n");  
  153. } else {  
  154. for(i=0; i<Q.rear; i++) {  
  155. printf("%5d/t", i);  
  156. PrintElem(Q.base[i]);  
  157. printf("/n");  
  158.  
  159. printf("..... ....../n");  
  160. for(i=Q.front; i<MAXQSIZE; i++) {  
  161. printf("%5d/t", i);  
  162. PrintElem(Q.base[i]);  
  163. printf("/n");  
  164.  
  165.  
  166. printf("--- view end ---/n");  
  167.  
  168. ******/ //TODO: 刪除此行以便使用QueueView()  
  169.  
  170. //取消ElemType的默認定義,以免影響其它部分  
  171. #ifdef USE_DEFAULT_ELEMTYPE  
  172. #undef ElemType  
  173. #undef USE_EFAULT_ELEMTYPE  
  174. #endif  
  175.  
  176. #endif //SQQUEUE_H_INCLUDED  
  177.  
  178. #include <stdio.h>  
  179. #include <stdlib.h>  
  180. #include "sqqueue.h"  
  181.  
  182. //初始化系統  
  183.  
  184.  
  185. void Finalize(SqQueue &q);  
  186.  
  187. ////////////////////////////////////////////  
  188. //主程序  
  189. int main()  
  190. {  
  191. SqQueue q; //循環隊列  
  192. int x;  
  193.  
  194. //系統初始化  
  195. InitQueue(q);  
  196. printf("數據元素進隊列,以0結束");  
  197. scanf("%d",&x);  
  198. while(x!=0){  
  199. EnQueue(q,x);  
  200. scanf("%d",&x);  
  201. }  
  202. printf("/n隊列元素的個數");  
  203.  
  204. printf("%d",QueueLength(q));  
  205.  
  206.  
  207. printf("/n頭元素是:");  
  208. if(!QueueEmpty(q)){  
  209. if(GetHead(q,x)==OK)  
  210. printf("%d",x);  
  211. }  
  212.  
  213.  
  214. printf("/n出隊列,先進先出");  
  215. if( DeQueue(q,x)==OK)  
  216. printf("%d",x);  
  217. printf("/n此時的對頭是:");  
  218. if(!QueueEmpty(q)){  
  219. if(GetHead(q,x)==OK)  
  220. printf("%d/n",x);  
  221. }  
  222.  
  223. }  

實現的效果:

如何實現循環隊列

以上所述就是本文的全部內容了,希望大家能夠理解。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性在线观看| 欧美日韩亚洲成人| 欧美一级高清免费| 国产精品看片资源| 亚洲欧美色婷婷| 亚洲综合色激情五月| 国产精品吴梦梦| 亚洲欧美国产一区二区三区| 国产免费亚洲高清| 成人激情视频小说免费下载| 欧美高清一级大片| 亚洲免费视频网站| 久久久久久久香蕉网| 亚洲影视中文字幕| 亚洲色图15p| 欧美国产第二页| 91免费综合在线| 欧美一级大片在线观看| 日韩在线观看免费高清完整版| 丝袜美腿精品国产二区| 日韩视频免费在线观看| 69久久夜色精品国产69乱青草| 国产精品www色诱视频| 国产国产精品人在线视| 精品国偷自产在线| 亚洲一区二区三区四区在线播放| 九九热精品视频国产| 国产一区视频在线播放| 国产精品视频自拍| 精品国产一区二区三区四区在线观看| 深夜福利亚洲导航| 欧美亚洲视频在线观看| 欧美性色xo影院| 久热99视频在线观看| 奇米一区二区三区四区久久| 久久久国产精品视频| 精品久久久久人成| 9.1国产丝袜在线观看| 自拍偷拍亚洲精品| 欧美精品久久一区二区| 久久免费视频网| 91精品在线看| 国产亚洲人成网站在线观看| 国产精品入口夜色视频大尺度| 日韩在线视频中文字幕| 国产精品va在线播放我和闺蜜| 亚洲电影av在线| 国产成人精品999| 91精品国产综合久久香蕉的用户体验| 91地址最新发布| 中文字幕一区电影| 91精品视频在线免费观看| 欧美乱妇40p| 国产一区二区三区日韩欧美| 国产精品久久久久av免费| 亚洲欧美国产日韩天堂区| 国产一区二区日韩| 日韩欧美成人区| 91av视频在线观看| 欧美日韩亚洲高清| 青青精品视频播放| 日韩av在线导航| 国产精品一区二区av影院萌芽| 成人黄色午夜影院| 欧美丰满少妇xxxx| 国产精品久久久久国产a级| 美日韩精品免费观看视频| 欧美亚洲国产另类| 亚洲欧美激情精品一区二区| 中文字幕亚洲一区二区三区五十路| 黑人巨大精品欧美一区二区免费| 亚洲国产成人精品一区二区| 91精品视频在线免费观看| 亚洲在线免费视频| 久久久之久亚州精品露出| 国产91av在线| 久久久久久久成人| 2019国产精品自在线拍国产不卡| 亚洲国产成人爱av在线播放| 日韩小视频在线观看| 成人精品一区二区三区| 国产一区二区视频在线观看| 亚洲精品日韩av| 国产美女精彩久久| 国产精品综合久久久| 亚洲国产高清福利视频| 麻豆一区二区在线观看| 成人羞羞国产免费| 97视频在线免费观看| 91伊人影院在线播放| 日韩av在线影院| 色偷偷888欧美精品久久久| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲精品av在线播放| 亚洲国语精品自产拍在线观看| 亚洲视频一区二区三区| 精品国产户外野外| 亚洲成人网av| 国产精品直播网红| 亚洲最大福利视频网站| 97精品在线视频| 91人人爽人人爽人人精88v| 欧美一级片久久久久久久| 精品国产依人香蕉在线精品| 91免费版网站入口| 成人黄色激情网| 亚洲自拍偷拍一区| 亚洲欧美成人精品| 国产91|九色| 97成人超碰免| 91精品在线观| 538国产精品一区二区在线| 中文字幕日本欧美| 日韩精品视频免费| 国产精品自产拍高潮在线观看| 亚洲欧洲偷拍精品| 亚洲一区二区中文| 国模私拍视频一区| 久久五月天色综合| 韩国三级电影久久久久久| 欧美专区在线播放| 欧美国产中文字幕| 色哟哟网站入口亚洲精品| 欧美成人sm免费视频| 精品亚洲国产成av人片传媒| 国产精品亚洲美女av网站| 精品国产91乱高清在线观看| 国产一区二区三区在线免费观看| 久久精品国产96久久久香蕉| 亚洲欧美中文在线视频| 欧美日韩另类视频| 精品欧美国产一区二区三区| 亚洲人成网站999久久久综合| 国产精品福利观看| 精品国产一区二区三区久久狼5月| 红桃av永久久久| 精品成人久久av| 最近中文字幕日韩精品| 不用播放器成人网| 91chinesevideo永久地址| 亚洲成人精品av| 97视频在线观看播放| 亚洲国语精品自产拍在线观看| 日韩在线小视频| 色av吧综合网| 国产欧美一区二区三区在线看| 91日本在线视频| 国产成人在线亚洲欧美| 欧美一二三视频| 热久久这里只有精品| 97色在线播放视频| 国产精品一区电影| 欧美精品一本久久男人的天堂| 国产精品一区二区久久| 亚洲福利在线看| 精品视频在线观看日韩| 91色琪琪电影亚洲精品久久| 国外视频精品毛片| 久久久久久国产三级电影| 国模视频一区二区| 欧美在线一级视频| 欧美日在线观看| 欧美精品在线第一页| xx视频.9999.com|