• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 183,  comments - 10,  trackbacks - 0
            來自于《冒號課堂》

            順序表實現:
              1 #include <iostream>
              2 using namespace std;
              3 
              4 typedef char ItemType;
              5 
              6 typedef struct
              7 {
              8     ItemType* data;
              9     int first;
             10     int last;
             11     int count;
             12     int size;
             13 } QueueType;
             14 
             15 typedef QueueType* Queue;
             16 
             17 int queue_initialize(Queue q)
             18 {
             19     int size = 100;
             20     q->size = size;
             21     q->data = (ItemType*)malloc(sizeof (ItemType) * size);
             22     if (q->data == 0)
             23     {
             24         return -1;
             25     }
             26     q->first = 0;
             27     q->last = -1;
             28     q->count = 0;
             29     return 0;
             30 }
             31 
             32 void queue_finalize(Queue q)
             33 {
             34     free(q->data);
             35     q->data = 0;
             36     q->first = 0;
             37     q->last = -1;
             38     q->count = 0;
             39 }
             40 
             41 int queue_empty(Queue q)
             42 {
             43     return q->count == 0;
             44 }
             45 
             46 int queue_length(Queue q)
             47 {
             48     return q->count;
             49 }
             50 
             51 static int queue_resize(Queue q)
             52 {
             53     int oldSize = q->size;
             54     int newSize = oldSize * 2;
             55     int newIndex;
             56     int oldIndex = q->first;
             57     ItemType* data = (ItemType*)malloc(sizeof (ItemType) * newSize);
             58     if (data == 0)
             59     {
             60         return -1;
             61     }
             62 
             63     for (newIndex = 0; newIndex < q->count; ++newIndex)
             64     {
             65         data[newIndex] = q->data[oldIndex];
             66         oldIndex = (oldIndex + 1% oldSize;
             67     }
             68     free(q->data);
             69     q->data = data;
             70     q->first = 0;
             71     q->last = oldSize - 1;
             72     q->size = newSize;
             73     return 0;
             74 }
             75 
             76 int queue_add(Queue q, ItemType item)
             77 {
             78     if (q->count >= q->size)
             79     {
             80         if (queue_resize(q) < 0)
             81         {
             82             return -1;
             83         }
             84     }
             85     q->last = (q->last + 1% q->size;
             86     q->data[q->last] = item;
             87     ++q->count;
             88     return 0;
             89 }
             90 
             91 int queue_remove(Queue q, ItemType* item)
             92 {
             93     if (q->count <= 0)
             94     {
             95         return -1;
             96     }
             97     *item = q->data[q->first];
             98     q->first = (q->first + 1% q->size;
             99     --q->count;
            100     return 0;
            101 }
            102 
            103 int queue_head(Queue q, ItemType* item)
            104 {
            105     if (q->count <= 0)
            106     {
            107         return -1;
            108     }
            109     *item = q->data[q->first];
            110     return 0;
            111 }
            112 
            113 int main()
            114 {
            115     QueueType queue;
            116     Queue q = &queue;
            117     char item;
            118     int i;
            119 
            120     queue_initialize(q);
            121     for (i = 0; i < 26++i)
            122     {
            123         queue_add(q, 'a' + i);
            124     }
            125 
            126     printf("Queue is %s\n", queue_empty(q) ? "empty" : "nonempty");
            127     printf("Queue length = %d\n", queue_length(q));
            128 
            129     while (queue_remove(q, &item) == 0)
            130     {
            131         printf("removing queue item: [%c].\n", item);
            132     }
            133 
            134     printf("Queue is %s\n", queue_empty(q) ? "empty" : "nonempty");
            135     queue_finalize(q);
            136 
            137     return 0;
            138 }

            鏈表實現:
              1 #include <iostream>
              2 using namespace std;
              3 
              4 typedef char ItemType;
              5 
              6 typedef struct NodeType
              7 {
              8     ItemType item;
              9     struct NodeType* next;
             10 } NodeType;
             11 
             12 typedef NodeType* Node;
             13 
             14 typedef struct
             15 {
             16     Node head;
             17     Node tail;
             18     int count;
             19 } QueueType;
             20 
             21 typedef QueueType* Queue;
             22 
             23 int queue_initialize(Queue q)
             24 {
             25     q->head = 0;
             26     q->tail = 0;
             27     q->count = 0;
             28     return 0;
             29 }
             30 
             31 int queue_remove(Queue q, ItemType* item)
             32 {
             33     Node oldHead = q->head;
             34     if (q->count <= 0)
             35     {
             36         return -1;
             37     }
             38     *item = oldHead->item;
             39     q->head = oldHead->next;
             40     free(oldHead);
             41     if (--q->count == 0)
             42     {
             43         q->tail = 0;
             44     }
             45     return 0;
             46 }
             47 
             48 void queue_finalize(Queue q)
             49 {
             50     ItemType item;
             51     while (queue_remove(q, &item) >= 0);
             52 }
             53 
             54 int queue_empty(Queue q)
             55 {
             56     return q->count <= 0;
             57 }
             58 
             59 int queue_length(Queue q)
             60 {
             61     return q->count;
             62 }
             63 
             64 int queue_add(Queue q, ItemType item)
             65 {
             66     Node node = (Node)malloc(sizeof (NodeType));
             67     if (node == 0)
             68     {
             69         return -1;
             70     }
             71 
             72     node->item = item;
             73     node->next = 0;
             74     if (q->tail != 0)
             75     {
             76         q->tail->next = node;
             77         q->tail = node;
             78     }
             79     else
             80     {
             81         q->head = q->tail = node;
             82     }
             83     ++q->count;
             84     return 0;
             85 }
             86 
             87 int queue_head(Queue q, ItemType* item)
             88 {
             89     if (q->count <= 0)
             90     {
             91         return -1;
             92     }
             93     *item = q->head->item;
             94     return 0;
             95 }
             96 
             97 int main()
             98 {
             99     QueueType queue;
            100     Queue q = &queue;
            101     char item;
            102     int i;
            103 
            104     queue_initialize(q);
            105     for (i = 0; i < 26++i)
            106     {
            107         queue_add(q, 'a' + i);
            108     }
            109 
            110     printf("Queue is %s\n", queue_empty(q) ? "empty" : "nonempty");
            111     printf("Queue length = %d\n", queue_length(q));
            112 
            113     while (queue_remove(q, &item) == 0)
            114     {
            115         printf("removing queue item: [%c].\n", item);
            116     }
            117 
            118     printf("Queue is %s\n", queue_empty(q) ? "empty" : "nonempty");
            119     queue_finalize(q);
            120 
            121     return 0;
            122 }
            posted on 2011-05-14 18:37 unixfy 閱讀(273) 評論(0)  編輯 收藏 引用
            国产成人精品久久一区二区三区av | 久久精品无码专区免费| aaa级精品久久久国产片| 国产婷婷成人久久Av免费高清| 国产精品伊人久久伊人电影| 香蕉久久一区二区不卡无毒影院| 久久亚洲精品无码AV红樱桃| 狠色狠色狠狠色综合久久| 国产激情久久久久影院| 热久久视久久精品18| 久久久久久a亚洲欧洲aⅴ| 日韩AV毛片精品久久久| 国产∨亚洲V天堂无码久久久| 久久久久久毛片免费看| 亚洲国产欧美国产综合久久| 热久久这里只有精品| 午夜人妻久久久久久久久| 国产精品青草久久久久福利99| 一本一本久久a久久精品综合麻豆| 伊人久久大香线蕉综合影院首页| 狠狠狠色丁香婷婷综合久久俺| 久久99精品久久久久久秒播| 亚洲va久久久噜噜噜久久天堂| 欧美精品丝袜久久久中文字幕| 无码国产69精品久久久久网站| 精品久久久久久久久久中文字幕 | 久久久久国产精品人妻| 国产精品久久久久久吹潮| 综合久久国产九一剧情麻豆| 久久天天躁狠狠躁夜夜2020老熟妇| 欧美va久久久噜噜噜久久| 久久久久亚洲爆乳少妇无| 国产精品久久久久久久久| 久久国产精品无码一区二区三区| 嫩草伊人久久精品少妇AV| 综合人妻久久一区二区精品| 久久强奷乱码老熟女网站| 久久精品国产欧美日韩99热| 亚洲精品午夜国产va久久| 久久精品国产亚洲AV香蕉| 无码人妻久久一区二区三区蜜桃|