欧美一卡2卡3卡4卡_99久久伊人久久99_亚洲免费在线播放_日韩免费观看高清完整版在线观看_一区二区成人在线视频_美国欧美日韩国产在线播放_欧美色图片你懂的_中文字幕欧美一区_色吊一区二区三区_风间由美一区二区三区在线观看_日本一区二区三区四区_亚洲国产精品成人久久综合一区_色狠狠av一区二区三区_日韩欧美在线1卡_日韩欧美国产精品一区_成人av网址在线

全國統一學習專線 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]處.

同類文章
欧美一卡2卡3卡4卡_99久久伊人久久99_亚洲免费在线播放_日韩免费观看高清完整版在线观看_一区二区成人在线视频_美国欧美日韩国产在线播放_欧美色图片你懂的_中文字幕欧美一区_色吊一区二区三区_风间由美一区二区三区在线观看_日本一区二区三区四区_亚洲国产精品成人久久综合一区_色狠狠av一区二区三区_日韩欧美在线1卡_日韩欧美国产精品一区_成人av网址在线

            91网站在线播放| 国产一区二区在线影院| 2017欧美狠狠色| 久久久精品黄色| 亚洲精品乱码久久久久久日本蜜臀| 亚洲免费在线观看| 欧美aaaaaa午夜精品| 激情另类小说区图片区视频区| 国产成人免费xxxxxxxx| av在线不卡观看| 亚洲精品二区| 欧美一三区三区四区免费在线看| 久久亚洲一区二区三区明星换脸| 亚洲欧洲精品一区二区三区不卡| 午夜精品久久久久久久久| 国产成人亚洲综合a∨猫咪 | 国产一区二区精品在线| 一区二区三区四区视频在线观看 | 亚洲欧洲精品一区二区三区 | 国产色综合久久| 亚洲一区二区三区国产| 国产乱色国产精品免费视频| 风间由美一区二区三区| 综合视频在线观看| 国产三级久久久| 蜜桃传媒麻豆第一区在线观看| 972aa.com艺术欧美| 亚洲成人自拍| 2023国产精品| 天堂影院一区二区| 97人人做人人人难人人做| 一本大道av一区二区在线播放| www欧美成人18+| 免费不卡在线观看| 国产日韩欧美精品| 欧美一区二区三区在线观看视频| 日韩伦理免费电影| 不卡视频一二三| 欧美综合亚洲图片综合区| 国产精品久久久久毛片软件| 国产自产高清不卡| 日本一区二区三区www| 精品久久久三级丝袜| 日韩电影在线免费| 农村寡妇一区二区三区| 欧美岛国在线观看| 久久99久久精品欧美| 久久99国产精品| 久久影音资源网| 国产成人亚洲综合a∨婷婷| 亚洲国产一区二区在线| 国产精品网友自拍| 成人一道本在线| 伊人久久大香线蕉午夜av| 国产精品久久久久久福利一牛影视| 国产露脸91国语对白| 最新不卡av| 亚洲人成亚洲人成在线观看图片| www.成人在线| 4hu四虎永久在线影院成人| 图片区小说区国产精品视频| 黄色91av| 国产精品免费免费| 91老师片黄在线观看| 欧美电影免费观看高清完整版在 | 亚洲一区二区五区| 国产精品露出视频| 久久久久免费观看| 成人av在线一区二区三区| 欧美色大人视频| 青青国产91久久久久久| 亚洲三区在线| 亚洲国产综合视频在线观看| 国产一区二区黄色| 国产精品麻豆99久久久久久| 91麻豆6部合集magnet| 精品欧美乱码久久久久久1区2区| 国产一区二区三区在线观看免费视频 | 国产一区二区不卡老阿姨| 亚洲国产成人不卡| 一区二区三区精品视频| 欧美激情第六页| 一区二区三区高清| 欧美精品亚洲| 亚洲国产日韩精品| 亚洲一区精品视频| 日欧美一区二区| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美日韩国产一二| 亚洲婷婷综合久久一本伊一区 | 色婷婷精品大视频在线蜜桃视频| 亚洲国产一二三| 亚洲午夜精品久久| 日韩激情一二三区| 欧美在线视频你懂得| 国产美女主播视频一区| 欧美一三区三区四区免费在线看| 成人午夜视频福利| 久久久精品国产免费观看同学| 9a蜜桃久久久久久免费| 中文字幕五月欧美| 日本不卡二区| 婷婷久久综合九色国产成人| 色乱码一区二区三区88| 国内精品视频666| 精品女同一区二区| 国产精品麻豆免费版| 国产精品久久久久久久岛一牛影视 | 韩国视频一区二区| 欧美高清视频不卡网| 97久久超碰精品国产| 国产精品美女久久久久久| 欧美一区二区三区电影在线观看 | 懂色一区二区三区免费观看| 精品国产露脸精彩对白 | 亚洲综合网中心| 国产美女av一区二区三区| 欧美xxxxxxxx| 精品国产免费久久久久久尖叫| 亚洲午夜激情网站| 欧美日本韩国一区二区三区视频| 国产麻豆精品在线观看| 久久久久久久久久久久久久久99| 九九热久久66| 卡一卡二国产精品 | 蜜桃视频一区二区三区| 精品蜜桃在线看| 免费日韩av电影| 精品一区二区在线视频| 久久久久久97三级| 伊人久久大香线蕉成人综合网 | av在线不卡电影| 亚洲美女淫视频| 欧美精品久久天天躁| 国产成人亚洲欧美| 蜜臂av日日欢夜夜爽一区| 久久精品夜色噜噜亚洲a∨| 视频在线精品一区| av在线播放不卡| 婷婷一区二区三区| 日本一区免费视频| 欧美日韩综合色| 久久影院理伦片| 国产精品夜夜爽| 亚洲一区二区偷拍精品| 精品少妇一区二区三区| 亚洲电影免费| 高清不卡一区二区三区| 精品无人码麻豆乱码1区2区| 中文字幕制服丝袜一区二区三区| 在线观看免费一区| 狠狠色伊人亚洲综合网站色| 韩国视频一区二区| 亚洲制服丝袜av| 久久精品男人的天堂| 欧美自拍偷拍午夜视频| 国产偷久久久精品专区| 国产一区在线视频| 亚洲午夜久久久久久久久电影院| 欧美tk—视频vk| 欧美视频一区二| 日本在线成人一区二区| 99在线视频精品| 经典三级在线一区| 亚洲成av人片| 亚洲色图一区二区| 精品国产百合女同互慰| 欧美色视频在线| 日本一区视频在线观看| 91久色porny| 国产成人精品影院| 久久精品噜噜噜成人av农村| 亚洲欧美一区二区不卡| 久久久久久久久久看片| 欧美一区二区在线看| 最新国产精品久久| 日韩国产一区久久| 久久精品国产美女| 成人免费视频视频在| 成人av网站在线观看| 国产一区啦啦啦在线观看| 午夜精品久久久久久久99樱桃| 国产精品久久777777| 久久综合资源网| 精品裸体舞一区二区三区| 欧美精品日韩综合在线| 在线欧美一区二区| 一区二区av| 亚洲亚洲精品三区日韩精品在线视频| 国产亚洲欧美一区二区| 91在线观看视频| av激情亚洲男人天堂| bt7086福利一区国产| 成人综合婷婷国产精品久久| 精品一区二区在线观看| 国产一区二区三区四区五区入口 | 国产女同性恋一区二区| 精品久久久久久综合日本欧美| 欧美一区二区三区日韩视频| 91精品国产综合久久婷婷香蕉|