數據結構之隊列c代碼實現


一學期的數據結構,總不能毫無收獲吧,因為書上的很多代碼並不能實現,我一個編程小白可怎么過呢,難得假期有時間,於是我尋求度娘,從四面八方找了些可以編譯通過的源碼,這一次是隊列,后面我還會逐漸補充,如果有什么差錯,歡迎大佬們來留言啊。

交一下代碼:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define QUEEN_SIZE 50
 4 
 5 typedef struct SeqQueue
 6 {
 7     int data[QUEEN_SIZE];
 8     int front;
 9     int rear;
10 }Queue;
11 
12 Queue *initQueue()
13 {
14     Queue *q=(Queue*)malloc(sizeof(Queue));
15     if(q==NULL)
16     {
17         printf("malloc failed!");
18         exit(-1);
19 
20     }
21     q->front = 0;
22     q->rear = 0;
23     return q;
24 }
25 int IsFull(Queue *q)
26 {
27     return ((q->rear+1)%QUEEN_SIZE == q->front);
28 }
29 int IsEmpty(Queue *q)
30 {
31     return (q->rear == q->front);
32 }
33 void EnQueue(Queue *q,int n)
34 {
35     if(IsFull(q))
36     {
37         return;
38     }
39     q->data[q->rear] = n;
40     q->rear = (q->rear+1)%QUEEN_SIZE;
41 }
42 int Dequeue(Queue *q)
43 {
44    if(IsEmpty(q))
45         return 0;
46     int temp=q->data[q->front];
47     q->front = (q->front+1)%QUEEN_SIZE;
48     return temp;
49 }
50 int main()
51 {
52     Queue *q = initQueue();
53     int i;
54     for(i=0;i<10;i++)
55     {
56         EnQueue(q,i);
57     }
58     while(!IsEmpty(q))
59     {
60         int data=Dequeue(q);
61         if(IsEmpty(q))
62             printf("%d",data);
63         else
64         printf("%d-> ",data);
65     }
66 }

隊列嘛,先進先出,添加元素時,先給rear賦值,然后移動向后rear,減少元素時,也是先賦值,再移動front指針,隊列為空時rear==front,隊列滿時(rear+1)%MAXSIZE== front。

好了,附一張運行結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM