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