佇列(Queue)-c實現

weixin_34104341發表於2020-04-07

相對而言,佇列是比較簡單的。

程式碼還有些warning,我改不動,要找gz幫忙。

  1 #include <stdio.h>
  2 
  3 typedef struct node
  4 {
  5     int data;
  6     struct node* next;
  7 }Node;
  8 
  9 typedef struct queue
 10 {
 11     Node* head;
 12     Node* tail;
 13 }Queue;
 14 
 15 void InitQueue(Queue*);
 16 void EnQueue(Queue*, int);
 17 int DeQueue(Queue* queue);
 18 void PrintQueue(Queue* queue);
 19 int IsNull(Queue* queue);
 20 void DelQueue(Queue* queue);
 21 
 22 void DelQueue(Queue* queue)
 23 {
 24     while(queue->head != queue->tail)
 25     {
 26         DeQueue(queue);
 27     }
 28 
 29 }
 30 
 31 
 32 
 33 void PrintQueue(Queue* queue)
 34 {
 35     if(IsNull(queue))
 36     {
 37         printf("empty queue.\n");
 38         return ;
 39     }
 40     Node* curNode= queue->head->next;
 41     while(curNode)
 42     {
 43         if(curNode->next !=NULL)
 44         {
 45             printf("%d==>", curNode->data);
 46         }else
 47         {
 48             printf("%d ", curNode->data);
 49 
 50         }
 51         curNode = curNode->next;
 52     }
 53     printf("\n");
 54 
 55 }
 56 
 57 
 58 void InitQueue(Queue* queue)
 59 {
 60     queue->tail = (Node*)malloc(sizeof(Node));//warning
 61     queue->tail->data = -1;
 62     queue->head = queue->tail;
 63     queue->tail->next = NULL;
 64 }
 65 //入佇列
 66 void EnQueue(Queue* queue, int data)
 67 {
 68     Node * newNode = (Node*)malloc(sizeof(Node));//warning
 69     newNode->data = data;
 70     newNode->next = NULL;
 71     queue->tail->next = newNode;//2b 這裡漏了。。。導致連結串列連不上去
 72     queue->tail = newNode;
 73 }
 74 
 75 int DeQueue(Queue* queue)
 76 {
 77     int popValue = queue->head->data;
 78     Node *popNode = queue->head;
 79     queue->head = queue->head->next;
 80     free(popNode);//warning
 81     return popValue;
 82 }
 83 //1 means Null
 84 int IsNull(Queue* queue)
 85 {
 86     return (queue->head == queue->tail);
 87 }
 88 
 89 
 90 int main(void)
 91 {
 92     printf("Hello World!\n");
 93     Queue queue;
 94     InitQueue(&queue);
 95     //printf("IsNull = %d\n", IsNull(&queue));
 96     printf("enque 4 times and the elems: 1, 2, 3, 4\n");
 97     EnQueue(&queue,1);
 98     //printf("IsNull = %d\n", IsNull(&queue));
 99     EnQueue(&queue,2);
100     EnQueue(&queue,3);
101     EnQueue(&queue,4);
102     PrintQueue(&queue);
103     printf("deque 1 times.\n");
104     DeQueue(&queue);
105     PrintQueue(&queue);
106 
107     printf("IsNull = %d\n", IsNull(&queue));
108     DelQueue(&queue);
109     printf("IsNull = %d\n", IsNull(&queue));
110 
111     return 0;
112 }

 

執行結果:

Hello World!
enque 4 times and the elems: 1, 2, 3, 4
1==>2==>3==>4
deque 1 times.
2==>3==>4
IsNull = 0
IsNull = 1  ////1 means Null


下個先寫寫排序吧,上次寫了一部分,當然演算法思想是參考其他人,我只是一個重造的菜狗。菜狗,菜狗,菜狗。。。,明天回家,很開心。晚上吃的太多,有點難受,@2016年7月29日00:44:26,睡不著。。。

轉載於:https://www.cnblogs.com/ashen/p/5716861.html

相關文章