69av在线视频_国产情人节一区_国产精品一区二区久久_国产一区二区不卡视频在线观看

全國統一學習專線 8:30-21:00
位置:魔方網 > 外語類 > AEAS > c中queue的用法  正文

c中queue的用法

2023-11-05 09:20:09來源:魔方格

摘要:下面小編就跟你們詳細介紹下c中queue的用法的用法,希望對你們有用。c中queue的用法的用法如下:Model--------------------------------------


(資料圖片)

   c中queue的用法的用法如下:

  Model

  ------------------------------------------------------------------------------------------------------------------------

  隊列也是限制插入和刪除位置的表.

  主要操作是enqueue和dequeue操作.

  enqueue:入隊操作.在表的隊尾(rear)插入一個元素.

  dequeue:出隊操作.刪除表的隊首(front)元素.

  本文使用循環數組實現GenericQueue.需要指定capacity.缺點是超出容量,無法動態增長.當然,可以仿照list的方式克服這個問題.

  完整代碼詳見我的github(https://github.com/gnudennis/ds_c)(genric-queue.h generic-queue.c generic-queue-test.c)

  核心代碼

  ------------------------------------------------------------------------------------------------------------------------

  0. Generic Queue定義

  [cpp] view plain copy

  01.typedef void *ElementAddr;

  02.typedef void (*PfCbFree)(ElementAddr);

  03.

  04.typedef struct QueueRecord

  05.{

  06. ElementAddr *array;

  07. int capacity;

  08. int elemsize;

  09. int front;

  10. int rear;

  11. int size;

  12. PfCbFree freefn;

  13.} *Queue;

  1. API

  [cpp] view plain copy

  01./* Create a new queue */

  02.Queue queue_create(int elemsize, int capacity, PfCbFree freefn);

  03.

  04./* Dispose the queue */

  05.void queue_dispose(Queue que);

  06.

  07./* Make the give queue empty */

  08.void queue_make_empty(Queue que);

  09.

  10./* Return true if the queue is empty */

  11.int queue_is_empty(Queue que);

  12.

  13./* Return true if the queue is full */

  14.int queue_is_full(Queue que);

  15.

  16./* Insert a new element onto queue */

  17.void queue_enqueue(Queue que, ElementAddr elemaddr);

  18.

  19./* Delete the front element off the queue */

  20.void queue_dequeue(Queue que);

  21.

  22./* Fetch the front element from the queue */

  23.void queue_front(Queue que, ElementAddr elemaddr);

  24.

  25./* Fetch and Delete the front element from the queue */

  26.void queue_front_and_dequeue(Queue que, ElementAddr elemaddr);

  2.Implementation

  [cpp] view plain copy

  01./* Create a new queue with capacity */

  02.Queue

  03.queue_create(int elemsize, int capacity, PfCbFree freefn)

  04.{

  05. Queue que;

  06.

  07. que = malloc(sizeof(struct QueueRecord));

  08. if ( que == NULL ) {

  09. fprintf(stderr, "Out of memory\n");

  10. exit(1);

  11. }

  12.

  13. que->elemsize = elemsize;

  14. que->capacity = capacity > MIN_QUEUE_SIZE ? capacity : MIN_QUEUE_SIZE;

  15.

  16. que->array = malloc(elemsize * que->capacity);

  17. if ( que->array == NULL ) {

  18. fprintf(stderr, "Out of memory\n");

  19. exit(1);

  20. }

  21. que->front = 1;

  22. que->rear = 0;

  23. que->size = 0;

  24. que->freefn = freefn;

  25.

  26. return que;

  27.}

  28.

  29./* Dispose the queue */

  30.void

  31.queue_dispose(Queue que)

  32.{

  33. if (que != NULL) {

  34. queue_make_empty(que);

  35. free(que->array);

  36. free(que);

  37. }

  38.}

  39.

  40./* Make the give queue empty */

  41.void

  42.queue_make_empty(Queue que)

  43.{

  44. if ( que->freefn ) {

  45. int i;

  46. for ( i = 0; i < que->size; ++i) {

  47. free((char *)que->array +

  48. que->elemsize * i);

  49. }

  50. }

  51. que->size = 0;

  52. que->front = 1;

  53. que->rear = 0;

  54.}

  55.

  56./* Return true if the queue is empty */

  57.int

  58.queue_is_empty(Queue que)

  59.{

  60. return que->size == 0;

  61.}

  62.

  63./* Return true if the queue is full */

  64.int

  65.queue_is_full(Queue que)

  66.{

  67. return que->size == que->capacity;

  68.}

  69.

  70.static int

  71.successor(Queue que, int index)

  72.{

  73. if ( ++index == que->capacity)

  74. index = 0;

  75. return index;

  76.}

  77.

  78./* Insert a new element onto queue(rear) */

  79.void

  80.queue_enqueue(Queue que, ElementAddr elemaddr)

  81.{

  82. void *target;

  83.

  84. if ( queue_is_full(que) ) {

  85. fprintf(stderr, "Full queue\n");

  86. exit(1);

  87. }

  88. que->rear = successor(que, que->rear);

  89. target = (char *)que->array + que->elemsize * que->rear;

  90. memcpy(target, elemaddr, que->elemsize);

  91. que->size++;

  92.}

  93.

  94./* Delete the front element off the queue */

  95.void

  96.queue_dequeue(Queue que)

  97.{

  98. if ( queue_is_empty(que) ) {

  99. fprintf(stderr, "Empty queue\n");

  100. exit(1);

  101. }

  102. if ( que->freefn ) {

  103. void *target = (char *)que->array +

  104. que->front * que->elemsize;

  105. que->freefn(target);

  106. }

  107. que->size--;

  108. que->front = successor(que, que->front);

  109.}

  110.

  111./* Fetch the front element from the queue */

  112.void

  113.queue_front(Queue que, ElementAddr elemaddr)

  114.{

  115. void *target = (char *)que->array +

  116. que->front * que->elemsize;

  117. memcpy(elemaddr, target, que->elemsize);

  118.}

  119.

  120./* Fetch and Delete the front element from the queue */

  121.void

  122.queue_front_and_dequeue(Queue que, ElementAddr elemaddr)

  123.{

  124. void *target;

  125.

  126. if ( queue_is_empty(que) ) {

  127. fprintf(stderr, "Empty queue\n");

  128. exit(1);

  129. }

  130.

  131. target = (char *)que->array +

  132. que->front * que->elemsize;

  133. memcpy(elemaddr, target, que->elemsize);

  134.

  135. que->size--;

  136. que->front = successor(que, que->front);

  137.}

  分析

  ----------------

  本文使用循環數組實現GenericQueue.需要指定capacity.既然是循環數組,就是圍成一個圈.也就插入第一個元素沒有必要非要放在0處啦.

  初始狀態:

  {

  que->size = 0;

  que->front = 1;

  que->rear = 0;

  }

  說明這樣第一次enqueue操作放在array[1]處,當然:這不是必須的,取決于你想放在那里.

  #define mxx

  {

  que->size = 0;

  que->front =m+1;

  que->rear = m;

  }

  就放在array[m+1]處.

同類文章
69av在线视频_国产情人节一区_国产精品一区二区久久_国产一区二区不卡视频在线观看
亚洲wwwav| 国产嫩草一区二区三区在线观看| av网址在线观看免费| 精品久久免费观看| 久久久中文字幕| 免费在线观看毛片网站| 日韩在线www| 国产日韩欧美视频| 久久国产精品久久精品| 国模无码视频一区二区三区| 久久九九热免费视频| 伊人久久av导航| 久久久久久精| 91好吊色国产欧美日韩在线| 国产精品一区二区三区成人| 视频一区二区综合| 91久久夜色精品国产网站| 国产欧美精品一区二区三区介绍 | 国产不卡一区二区在线观看| 88国产精品欧美一区二区三区| 国产精品色悠悠| 久久视频免费在线| 国产精品无码av无码| 九九九久久国产免费| 亚洲欧美日韩另类精品一区二区三区| 日韩亚洲成人av在线| 久久久噜噜噜久噜久久| 久99久视频| 欧美精品久久久久| 欧美有码在线观看视频| 精品少妇人欧美激情在线观看 | 日本精品视频在线| 国产精品视频导航| 国产精品久久久久久久久久久不卡| 日本91av在线播放| 欧美激情在线有限公司| 国产精品久久久久久久久婷婷| 一区二区三区四区欧美| 亚洲欧洲精品一区| 久久久久国产精品一区| 亚洲美女网站18| 一级特黄妇女高潮| 久久久久久久一区二区三区| 国产深夜男女无套内射| 久久艳妇乳肉豪妇荡乳av| 久久久久99精品成人片| 蜜臀久久99精品久久久久久宅男| 国产日韩欧美自拍| av资源站久久亚洲| 久久久久久欧美精品色一二三四 | 久久综合伊人77777蜜臀| 国内精品久久久久久中文字幕| 久久深夜福利免费观看| 国产精品日韩欧美一区二区三区| 激情图片qvod| 97碰在线视频| 国产精品国产亚洲精品看不卡15| 国产美女精品免费电影| 久久综合九色欧美狠狠| 国产精品久久久久久久美男| 中文字幕一区二区三区最新| 欧美视频小说| 97精品国产91久久久久久| 久久久在线观看| 国产精品久久久久999| 久久久久久久久国产| 国产成人成网站在线播放青青| 日本精品一区二区三区视频| 国产精品一区二区在线观看| 国产高清在线一区| 国产精品欧美一区二区三区奶水| 久久久久免费视频| 国产高清精品一区二区三区| 久久国产精品精品国产色婷婷| 精品视频免费观看| 91精品国产色综合| 欧美极品日韩| 精品人妻人人做人人爽| 国产中文字幕视频在线观看| 99精品国产一区二区| 久久精品久久精品亚洲人| 国产精品无码乱伦| 国产一区香蕉久久| 国产精品免费在线播放| 男人天堂成人网| 久久亚洲精品视频| 欧美怡红院视频一区二区三区| 久久色精品视频| 国产欧美一区二区三区久久人妖| 国产精彩精品视频| 国内精品视频在线播放| 日韩欧美在线一区二区| 亚洲在线不卡| 99久久久精品视频| 国产精品嫩草影院一区二区| 日韩小视频在线播放| 91九色视频在线| 国产精品视频26uuu| 免费h精品视频在线播放| 久久精品国产精品青草色艺| 欧美深夜福利视频| 久久久久久久久久久网站| 欧美一区二区三区综合| 国产精品久久久久久久午夜| 黄色片网址在线观看| 一区二区三区av在线| 粉嫩av免费一区二区三区| 久久亚洲影音av资源网| 久久精品香蕉视频| aaa级精品久久久国产片| 亚洲不卡中文字幕| 91精品啪在线观看麻豆免费| 国产精品免费区二区三区观看| 国产在线播放一区二区| 日本视频一区二区在线观看| 奇米精品一区二区三区| 日韩欧美一区二区三区久久婷婷| 青青草国产精品视频| 日本精品久久久久中文字幕| 精品人伦一区二区三区| 久久99欧美| 美日韩精品免费视频| 日本亚洲欧洲色α| 国产精品久久7| 国产精品一区二区三区在线 | 欧美猛交ⅹxxx乱大交视频| 久久久免费看| 波多野结衣综合网| 国产精品永久在线| 黄色录像特级片| 日韩av123| 天天夜碰日日摸日日澡性色av| 黄色av免费在线播放| 日韩影院一区| 亚洲一区不卡在线| 国产精品视频久| 日韩在线视频观看| 97精品国产97久久久久久免费| 国产精品日韩欧美大师| 国产精品推荐精品| 欧美日韩精品一区| 久久视频中文字幕| 日韩视频 中文字幕| 欧美一级片一区| 不卡毛片在线看| 日本不卡一区二区三区四区| 亚洲最新在线| 人人妻人人澡人人爽欧美一区双| 欧美成年人网站| 久久久久久国产| 亚洲蜜桃av| 免费亚洲一区二区| 国产成人精品电影| 99国产视频| 欧美黄网免费在线观看| 国产精品日日摸夜夜添夜夜av| 国产精品对白刺激久久久| 亚洲一区高清| 久久久www免费人成黑人精品 | 欧美日本精品在线| 美女999久久久精品视频| 伊人网在线免费| 欧美大成色www永久网站婷| 亚洲在线观看一区| 亚洲一区二区在线观| 分分操这里只有精品| 欧美成人一区二区在线| 国产精品视频26uuu| 国产精品久久综合av爱欲tv| 在线观看亚洲视频啊啊啊啊| 国产综合 伊人色| 久久精品国产精品亚洲| 欧美亚洲一区在线| 色综合91久久精品中文字幕 | 宅男在线精品国产免费观看| 亚洲一区二区在线播放| 日本高清视频精品| 国产成人无码av在线播放dvd | 霍思燕三级露全乳照| 91精品国产综合久久香蕉最新版 | 97色在线观看免费视频| 国产美女作爱全过程免费视频| 精品国产综合| 国产欧亚日韩视频| 国产一区二区片| 亚洲一区二区三区视频| 7777免费精品视频| 国内成+人亚洲| 五月天亚洲综合情| 久久亚洲精品成人| 成人一区二区在线| 日韩xxxx视频| 精品福利影视| 久草一区二区| 国产精品午夜av在线| 日本黄网免费一区二区精品| 国产精品久久久久久久av电影 | 91九色对白| 日韩视频在线播放| 日韩免费av在线|