数据结构学习-使用C语言实现队列(源码)
1
5 #include <stdio.h>
6 #define SIZE 10
7 typedef struct{
8
9 int buf[SIZE];
10
11
12 int head;
13
14 int tail;
15 }queue_t;
16
17 void queue_init(queue_t* p_queue){
18 p_queue->head = p_queue->tail = 0;
19 }
20
21 void queue_deinit(queue_t* p_queue){
22 p_queue->head = p_queue->tail = 0;
23 }
24
25 int queue_size(const queue_t* p_queue){
26 return p_queue->tail-p_queue->head;
27 }
28
29 int queueIsEmpty(const queue_t* p_queue){
30
31 return p_queue->head == p_queue->tail;
32 }
33
34 int queueIsFull(const queue_t* p_queue){
35 return queue_size(p_queue)>= SIZE;
36 }
37
38 int queue_push(queue_t* p_queue,int val){
39 if(queueIsFull(p_queue))
40 return 0;
41 p_queue->buf[p_queue->tail] = val;
42 p_queue->tail++;
43 return 1;
44 }
45
46 int queue_pop(queue_t* p_queue,int* val){
47 if(queueIsEmpty(p_queue))
48 return 0;
49 *val = p_queue->buf[p_queue->head];
50 p_queue->head++;
51 return 1;
52 }
53
54 int queue_top(const queue_t* p_queue,int* val){
55 if(queueIsEmpty(p_queue))
56 return 0;
57 *val =p_queue->buf[p_queue->head];
58 return 1;
59 }
60
61 void display(const queue_t* p_queue){
62 if(queueIsEmpty(p_queue)){
63 printf("对列为空!\n");
64 return;
65 }
66 for(int i = p_queue->head;i<p_queue->tail;i++){
67 printf("%d ",p_queue->buf[i]);
68 }
69 printf("\n");
70 }
71
72 void queue_test(queue_t* p_queue){
73 printf("队列中的数字个数是%d\n",queue_size(p_queue));
74 printf("判断队列满的结果是%d\n",queueIsFull(p_queue));
75 printf("判断队列空的结果时%d\n",queueIsEmpty(p_queue));
76 display(p_queue);
77 }
78 int main(void){
79 queue_t queue;
80 queue_init(&queue);
81 queue_test(&queue);
82
83 printf("\n");
84 printf("从队列中放入数字:\n");
85 for(int i = 1;i<=SIZE;i++)
86 queue_push(&queue,i*10);
87 queue_test(&queue);
88 printf("\n");
89 int pop_val;
90 queue_pop(&queue,&pop_val);
91 printf("从队列中弹出数字(pop):%d\n",pop_val);
92 queue_test(&queue);
93 printf("\n");
94 int top_val;
95 queue_top(&queue,&top_val);
96 printf("从对列中弹出数字(top):%d\n",top_val);
97 queue_test(&queue);
98 printf("\n");
99 printf("清理队列:\n");
100 queue_deinit(&queue);
101 queue_test(&queue);
102 return 0;
}