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在线视频_国产情人节一区_国产精品一区二区久久_国产一区二区不卡视频在线观看
欧美日韩大片一区二区三区| 美女精品久久久| 日韩精品一区二区三区四| 国产一区玩具在线观看| 国产成人一区二区在线| 国产99视频精品免费视频36| 亚洲 日韩 国产第一区| 国产欧美综合一区| 久久综合色88| 国产尤物av一区二区三区| 久久国产一区二区三区| 日韩高清国产精品| 国产精品69页| 懂色av粉嫩av蜜臀av| 91精品视频在线看| 亚洲精品一区二| 99在线观看| 在线视频欧美一区| 成人欧美一区二区三区黑人免费| 欧美激情视频在线观看| 国产精品一区二区久久久久| 国产精品免费一区二区三区观看| 极品校花啪啪激情久久| 国产精品美女av| 国产在线精品一区二区中文| 欧美精品免费看| 国产日韩欧美黄色| 欧美精品福利视频| 91久久偷偷做嫩草影院| 午夜精品视频网站| 久久九九国产视频| 日av在线播放中文不卡| 久久视频这里只有精品| 精品视频免费观看| 一级黄色免费在线观看| 91精品国产99| 偷拍盗摄高潮叫床对白清晰| 久久av喷吹av高潮av| 免费在线观看一区二区| 美日韩精品免费视频| 91久久久久久久久久久久久| 日韩福利视频| 国产精品丝袜高跟| 国产色婷婷国产综合在线理论片a| 一区高清视频| 国产成人激情视频| 精品999在线观看| 欧美激情在线有限公司| 久久手机视频| 黄色免费福利视频| 最新av网址在线观看| 国产精品国产一区二区| 毛片一区二区三区四区| 日韩久久久久久久久久久久久| 又大又硬又爽免费视频| 国产精品久久久久久久久男| 国产成人a亚洲精v品无码| 国产精品一区二区久久精品| 国内精品视频一区| 欧美有码在线观看视频| 亚洲伊人第一页| 国产精品成人免费电影| 不卡毛片在线看| 国产精品自产拍在线观看中文| 亚洲熟妇无码一区二区三区| 久久草.com| 麻豆成人av| 亚洲一区二区三区av无码| 久久天堂电影网| 久久91亚洲精品中文字幕| 国产精品99久久99久久久二8| 国产精品亚洲片夜色在线| 精品无人区一区二区三区| 欧美性视频在线| 91精品久久久久久久久久久久久 | 欧美精品一区二区三区三州| 久久久久久国产精品美女| 亚洲一区中文字幕| 亚洲一区二区高清视频| 最新国产精品久久| 欧美激情极品视频| 精品国产成人av在线免| 欧美不卡视频一区发布| 国产精品成av人在线视午夜片| 国产精品免费一区二区| 国产精品视频自在线| 国产精品色午夜在线观看| 国产精品三区在线| 国产精品久久久久久久9999 | 欧美亚洲精品日韩| 欧美在线影院在线视频| 欧美日韩精品免费观看视一区二区| 青青久久av北条麻妃黑人| 人体内射精一区二区三区| 日本一区二区三不卡| 人禽交欧美网站免费| 青青草综合在线| 欧美日韩视频在线一区二区观看视频| 欧美在线观看日本一区| 欧美精品成人一区二区在线观看| 欧美精品国产精品久久久| 黄色动漫在线免费看| 国产日韩二区| 成人毛片一区二区| 99久久精品久久久久久ai换脸 | 久久99国产精品久久久久久久久| 美女久久久久久久久久久| 真实国产乱子伦对白视频| 一本久道久久综合| 午夜精品美女久久久久av福利| 日韩精品另类天天更新| 男人的天堂成人| 国产视频一区二区三区在线播放| 国产精品揄拍一区二区| 91免费视频网站在线观看| 国产精品96久久久久久又黄又硬| 久热免费在线观看| 日韩在线视频一区| 精品乱子伦一区二区三区| 一区二区不卡在线观看| 少妇大叫太大太粗太爽了a片小说| 日韩精品一区二区三区电影| 免费h精品视频在线播放| av在线免费观看国产| 久久国产亚洲精品无码| 国产精品高清一区二区三区| 亚洲自拍欧美另类| 日本va中文字幕| 国产综合在线看| 97成人在线视频| 久久久97精品| 欧美激情xxxx性bbbb| 日本一区二区三区四区视频| 欧美日本国产精品| 97欧洲一区二区精品免费| www.亚洲成人| 欧美日韩国产成人在线| 日本欧美国产在线| 国产一区喷水| 国产精品69页| 欧美另类在线播放| 日韩精品不卡| 成人免费在线网| 久久精品视频一| 亚洲不卡中文字幕| 国产真实乱子伦| 久久久久99精品成人片| 欧美xxxx18性欧美| 天天夜碰日日摸日日澡性色av| 麻豆av一区二区三区久久| 国产高清精品一区二区三区| 欧美猛交ⅹxxx乱大交视频| 日本韩国在线不卡| 成人免费91在线看| 国产精品人成电影| 日产中文字幕在线精品一区| 国产噜噜噜噜噜久久久久久久久| 日韩视频在线观看免费| 亚洲精品乱码视频| 国产日韩欧美在线视频观看| 色偷偷88888欧美精品久久久| 亚洲一卡二卡| 红桃av在线播放| 久久久噜久噜久久综合| 亚洲免费不卡| 国产日韩欧美在线看| 久久色免费在线视频| 日本三级久久久| 99超碰麻豆| 不卡av电影院| 欧美久久久久久久久久久久久久| 91精品国产高清自在线| 九色精品免费永久在线| 欧美日韩一区在线播放| 久久99久久精品国产| 亚洲福利av在线| 国产九区一区在线| 国产精品免费一区二区三区在线观看| 日本精品一区二区三区不卡无字幕| 成人中文字幕在线播放| 精品卡一卡二| 国模精品一区二区三区色天香| 日韩在线视频观看| 日本精品视频在线播放| 久久人人97超碰精品888| 懂色中文一区二区三区在线视频| 成人免费福利在线| 中文字幕免费高| 国产免费一区二区视频| 精品国产av无码一区二区三区| 黄色大片中文字幕| 国产精品视频久| 日韩精品一区二区三区四| 久久国产精品一区二区三区四区| 天堂资源在线亚洲视频| 久久婷婷开心| 日韩中文字幕三区| 久久视频这里有精品| 少妇人妻互换不带套| 久久资源av|