<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學(xué)習(xí)啦>學(xué)習(xí)英語(yǔ)>專業(yè)英語(yǔ)>計(jì)算機(jī)英語(yǔ)>

        c中queue的用法

        時(shí)間: 長(zhǎng)思709 分享

          下面小編就跟你們?cè)敿?xì)介紹下c中queue的用法的用法,希望對(duì)你們有用。

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

          Model

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

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

          主要操作是enqueue和dequeue操作.

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

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

          本文使用循環(huán)數(shù)組實(shí)現(xiàn)GenericQueue.需要指定capacity.缺點(diǎn)是超出容量,無(wú)法動(dòng)態(tài)增長(zhǎng).當(dāng)然,可以仿照l(shuí)ist的方式克服這個(gè)問(wèn)題.

          完整代碼詳見(jiàn)我的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.}

          分析

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

          本文使用循環(huán)數(shù)組實(shí)現(xiàn)GenericQueue.需要指定capacity.既然是循環(huán)數(shù)組,就是圍成一個(gè)圈.也就插入第一個(gè)元素沒(méi)有必要非要放在0處啦.

          初始狀態(tài):

          {

          que->size = 0;

          que->front = 1;

          que->rear = 0;

          }

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

          #define mxx

          {

          que->size = 0;

          que->front =m+1;

          que->rear = m;

          }

          就放在array[m+1]處.

        c中queue的用法

        下面小編就跟你們?cè)敿?xì)介紹下c中queue的用法的用法,希望對(duì)你們有用。 c中queue的用法的用法如下: Model ------------------------------------------------------------------------------------------------------------------------
        推薦度:
        點(diǎn)擊下載文檔文檔為doc格式

        上一篇:c中out的用法

        下一篇:c中random的用法

        精選文章

        • c中out的用法
          c中out的用法

          下面小編就跟你們?cè)敿?xì)介紹下c中out的用法的用法,希望對(duì)你們有用。 c中out的用法的用法如下: 在C#這門(mén)高級(jí)語(yǔ)言中,你是否注意過(guò)ref與out的用法?你是否

        • c中new的用法
          c中new的用法

          下面小編就跟你們?cè)敿?xì)介紹下c中new的用法的用法,希望對(duì)你們有用。 c中new的用法的用法如下: 一. 簡(jiǎn)介 new有三種使用方式:plain new,nothrow new和placement

        • c中map的用法
          c中map的用法

          下面小編就跟你們?cè)敿?xì)介紹下c中map的用法的用法,希望對(duì)你們有用。 c中map的用法的用法如下: Map是c++的一個(gè)標(biāo)準(zhǔn)容器,她提供了很好一對(duì)一的關(guān)系,在一

        • c中malloc的用法
          c中malloc的用法

          下面小編就跟你們?cè)敿?xì)介紹下c中malloc的用法的用法,希望對(duì)你們有用。 c中malloc的用法的用法如下: 函數(shù)聲明(函數(shù)原型): void *malloc(int size); 說(shuō)明:mallo

        537236 主站蜘蛛池模板: 成人无码视频在线观看免费播放| 国产精品一区二区三区黄色| 日韩中文字幕综合第二页| 国产国产精品人体在线视| 国产国亚洲洲人成人人专区| 人妻少妇偷人精品一区| 青青草一区在线观看视频| 免费国产好深啊好涨好硬视频| xxxxx欧美视频在线观看免费看| 性男女做视频观看网站| 2023国产一线二线三线区别| 黄色舔女人逼一区二区三区| 又黄又无遮挡AAAAA毛片| 色欲国产一区二区日韩欧美| 国产AV巨作丝袜秘书| 久青草视频在线视频在线| 人妻一区二区三区三区| 国产AV巨作丝袜秘书| 免费看国产成人无码a片| 少妇被多人c夜夜爽爽av| 不卡一区二区三区视频播放| 日韩丝袜欧美人妻制服| 色婷婷亚洲婷婷7月| 四虎永久精品免费视频| 99精品国产综合久久久久五月天 | 国产日产亚洲系列av| 国产精品小粉嫩在线观看| 亚洲成色精品一二三区| 亚洲AV无码专区亚洲AV桃| 久久久精品人妻一区二区三区| 亚洲av无码久久精品色欲| 国产日韩AV免费无码一区二区三区| 国产成人午夜福利院| 成人综合网亚洲伊人| 极品少妇的粉嫩小泬看片| 免费人成再在线观看网站| 国产成人亚洲精品狼色在线 | 国产午夜在线观看视频| 日韩中文字幕在线不卡一区| 免费无码又爽又刺激网站| 日韩淫片毛片视频免费看|