欧美一卡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精品| 日韩欧美国产三级| 欧美性一级生活| 欧美日韩久久一区| 欧美精品精品一区| 日韩欧美在线观看一区二区三区| 91麻豆精品国产91久久久更新时间| 欧美顶级少妇做爰| 欧美一区二区三区人| 日韩免费看的电影| 国产欧美一区二区精品秋霞影院| 国产精品青草综合久久久久99| 亚洲色图清纯唯美| 天堂精品中文字幕在线| 精油按摩中文字幕久久| 成人在线综合网| 成人羞羞视频免费| 欧美一二三四五区| 欧美午夜精品久久久久久孕妇| 日韩午夜激情视频| 国产精品久久午夜夜伦鲁鲁| 亚洲综合丝袜美腿| 精品在线观看免费| 99精品国产热久久91蜜凸| 国产一区免费在线观看| 亚洲欧洲一二三| 日韩一区二区免费视频| 亚洲国产岛国毛片在线| 亚洲bdsm女犯bdsm网站| 粉嫩一区二区三区在线看| 国产亚洲福利社区| 在线观看一区二区视频| 精品日产卡一卡二卡麻豆| 国产精品久久国产精麻豆99网站| 午夜婷婷国产麻豆精品| 国产精品一区二区视频| 激情视频一区二区| 欧美亚洲动漫制服丝袜| 国产精品久久夜| 国产真实乱子伦精品视频| 国产欧美在线一区二区| 欧美视频在线一区二区三区| 国产精品全国免费观看高清| 久久9热精品视频| 精品国产一区二区三| 欧美一a一片一级一片| 国产嫩草影院久久久久| 琪琪一区二区三区| 国产精品区一区二区三在线播放 | 国产一区 二区 三区一级| 91偷拍精品一区二区三区| 中文字幕日韩一区二区三区不卡| 久久综合999| 男女男精品网站| 国产伦视频一区二区三区| 在线成人免费视频| 亚洲视频中文字幕| 成人一区在线观看| 色伊人久久综合中文字幕| 国产精品美女久久久久av爽李琼| 国产一区二区三区黄视频| 日韩久久久久久久| 国产网站一区二区| 国产精品888| 色呦呦国产精品| 亚洲精品国产精品乱码不99| 成人av网址在线| 色成人在线视频| 亚洲女女做受ⅹxx高潮| 99久久免费视频.com| 欧美日本视频在线| 日本亚洲欧美天堂免费| 欧美污视频久久久| 久久久久一区二区三区四区| 国产一区二区0| 在线观看亚洲精品视频| 亚洲va欧美va人人爽午夜| 国产一区免费| 中国色在线观看另类| 99re在线精品| 精品日本一线二线三线不卡| 麻豆免费看一区二区三区| 欧美不卡在线一区二区三区| 国产无一区二区| 成人av在线网站| 日韩一区二区三区三四区视频在线观看| 婷婷中文字幕一区三区| 先锋影音一区二区三区| 亚洲欧美韩国综合色| 狠狠色伊人亚洲综合网站色| 国产精品毛片无遮挡高清| 91国产在线播放| 精品国产乱码久久久久久浪潮| 国产成人在线观看| 欧美日本一区二区三区| 极品少妇xxxx精品少妇| 欧美三级中文字| 首页欧美精品中文字幕| 亚洲视频电影| 免费观看成人av| 欧美日韩成人在线一区| 国产精品99久久久久久有的能看| 欧美日韩一级片网站| 免费不卡在线视频| 欧美激情一区二区| 成人看片黄a免费看在线| 777xxx欧美| 国产麻豆欧美日韩一区| 欧美人xxxx| 国产激情精品久久久第一区二区 | 一本大道av伊人久久综合| 夜夜精品视频一区二区| 久久久久高清| 亚洲男女一区二区三区| 色综合视频二区偷拍在线| 亚洲黄色尤物视频| 亚洲春色在线视频| 日韩精品久久理论片| 在线观看日本一区| 精品一区二区在线看| 欧美丰满一区二区免费视频| 国产麻豆午夜三级精品| 337p日本欧洲亚洲大胆精品| 亚洲国产色一区| 欧美优质美女网站| 国产精选一区二区三区| 精品国产成人在线影院 | 91福利资源站| 五月天国产精品| 日本韩国欧美一区| 久久99精品网久久| 欧美精选一区二区| 99久久综合色| 伊人夜夜躁av伊人久久| 一区二区三区三区在线| 国产精品1024久久| 久久久久国产精品厨房| 欧美久久久久久| 奇米在线7777在线精品| 欧美日韩免费不卡视频一区二区三区| 久久99精品久久久| 久久久久国产精品麻豆ai换脸| 国外成人在线视频网站| 亚洲国产日韩综合久久精品| 欧美视频一二三区| 91亚洲永久精品| 亚洲电影第三页| 欧美成人a∨高清免费观看| 国产日韩亚洲精品| 蜜臀av性久久久久av蜜臀妖精| 欧美成人video| 午夜精品区一区二区三| 国产精品乱码人人做人人爱| 亚洲乱码一区二区三区| 成人国产精品视频| ●精品国产综合乱码久久久久| 91久久久免费一区二区| 91精品国产欧美一区二区成人| 国产欧美日韩视频一区二区三区| 丝袜美腿亚洲一区| 久久久久99精品一区| 亚洲精品在线观看免费| 豆国产96在线|亚洲| 亚洲狼人国产精品| 日韩欧美久久一区| 午夜精品一区二区在线观看| 国产一区二区精品久久91| 欧美国产欧美综合| 欧美老人xxxx18| 久久精品日产第一区二区三区| 国产一区啦啦啦在线观看| 一区二区欧美视频| 国产亚洲一区二区三区四区| 夜夜爽99久久国产综合精品女不卡 | 欧美中文字幕一区二区三区亚洲| proumb性欧美在线观看| 亚洲精品久久嫩草网站秘色| 欧美电影精品一区二区| 翔田千里亚洲一二三区| 91日韩在线专区| 国内久久婷婷综合| 亚洲人成网站色在线观看| 欧美亚洲综合网| 日韩精品久久久毛片一区二区| 成人app网站| 精品一二三四区| 爽好多水快深点欧美视频| 亚洲日本va午夜在线影院| 日韩视频123| 日本国产一区二区| 日韩免费av一区二区三区| 国产精品一区二区欧美黑人喷潮水| 国产九色sp调教91| 久久精品国产99久久6| 视频一区视频二区中文字幕| 一区二区在线看| 亚洲特黄一级片| 中文字幕av一区二区三区高| 欧美成人三级电影在线|