一学期的数据结构,总不能毫无收获吧,因为书上的很多代码并不能实现,我一个编程小白可怎么过呢,难得假期有时间,于是我寻求度娘,从四面八方找了些可以编译通过的源码,这一次是队列,后面我还会逐渐补充,如果有什么差错,欢迎大佬们来留言啊。
交一下代码:
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。
好了,附一张运行结果。
时间: 2024-10-16 04:11:58