1 //这是一个循环顺序队列的判空、压栈、出栈、取栈顶等操作 2 #include <stdio.h> 3 4 #define MaxSize 100 5 typedef int bool; 6 #define T 1 7 #define F 0 8 9 typedef int DataType; 10 typedef struct queue{ 11 DataType data[MaxSize]; 12 int rear; 13 int front; 14 int count; 15 }SeqQueue; 16 17 //队列初始化 18 void SeqQueueInit(SeqQueue *queue) 19 { 20 queue->count = 0; 21 queue->front = 0; 22 queue->rear = 0; 23 } 24 25 //判断队列非空否 26 bool SeqQueueNoEmpty(SeqQueue queue) 27 { 28 if (queue.count!=0) //队列不为空 29 { 30 return 1; 31 } 32 else //队列为空 33 { 34 return 0; 35 } 36 } 37 38 //进入队列 39 int SeqQueuePush(SeqQueue *queue, DataType x) 40 { 41 if (queue->count>=MaxSize) 42 { 43 return 0; 44 } 45 queue->data[queue->rear]=x; 46 queue->rear = (queue->rear + 1) % MaxSize; 47 queue->count++; 48 return 1; 49 } 50 51 //出队列 52 int SeqQueuePop(SeqQueue *queue, DataType *x) 53 { 54 if (queue->count==0) 55 { 56 return 0; 57 } 58 *x = queue->data[queue->front]; 59 queue->front = (queue->front + 1) % MaxSize; 60 queue->count--; 61 return 1; 62 } 63 64 //取出队头 65 int SeqQueueTop(SeqQueue queue) 66 { 67 if (queue.count==0) 68 { 69 return 0; 70 } 71 return queue.data[queue.front]; 72 } 73 74 //主函数 75 int main() 76 { 77 SeqQueue queue; 78 int x, i; 79 80 SeqQueueInit(&queue); 81 for ( i = 0; i < 15; i++) 82 { 83 if ((SeqQueuePush(&queue, i)) == 0) 84 { 85 printf("1error"); 86 getchar(); 87 return; 88 } 89 } 90 printf("队头:%d\n", SeqQueueTop(queue)); 91 while (SeqQueueNoEmpty(queue)!=0) 92 { 93 if ((SeqQueuePop(&queue, &x)) == 0) 94 { 95 printf("2error"); 96 getchar(); 97 return; 98 } 99 else 100 { 101 printf("%d ", x); 102 } 103 } 104 getchar(); 105 return 0; 106 }