此篇为原创,如需转载,请注明出处:http://blog.csdn.net/qq_36759732。
大家都知道,队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的一端进行插入,而在另一端进行删除元素的线性表。队尾(tail)是允许插入的一端。队头(head)是允许删除的一端。空队列是不含元素的空表。
根据这样的操作。队列特点是先进先出~ 通过此篇,你将会深入了解到队列的基本操作,便于以后使用队列时更加清楚。大家知道,队列的基本操作,有出队,入队,查看队首元素等,但它本质上是如何实现的呢,下面我会通过代码实现对列的基本操作。 队列中可以存放各种类型,甚至可以再存放一个队列,为了便于解释,下面操作用存放整型数据元素实现。
编程环境:linux
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 #define OK 1
5 #define ERROR 0
6
7 typedef struct {
8 int *data;
9 int head;
10 int tail;
11 int length;
12 }queue,*Queue;
13
14 void init(Queue q, int n){ //初始化
15 q->data = (int *)malloc(n * sizeof(int));
16 q->head = 0;
17 q->tail = -1;
18 q->length = n;
19 }
20
21 int push_queue(Queue q, int value){ //入队
22 if(q->tail == q->length - 1) return ERROR;
23 ++q->tail;
24 q->data[q->tail] = value;
25 return OK;
26 }
27
28 void front(Queue q){ // 查看队首元素
29 printf("队首front: %d\n", q->data[q->head]);
30 return ;
31 }
32
33 int empty(Queue q){ // 判空
34 if(q->tail == -1) return 0;
35 return 1;
36 }
37
38 int pop_queue(Queue q){ // 出队
39 if(empty(q)){
40 printf("出队: %d\n", q->data[q->head]);
41 ++q->head;
42 return OK;
43 }
44 return ERROR;
45 }
46
47 void output(Queue q){ // 输出队列
48 printf("QUEUE:");
49 if(empty(q)){
50 for(int i = q->head; i <= q->tail; ++i){
51 printf(" %d", q->data[i]);
52 }
53 printf("\n");
54 }
55 return ;
56 }
57
58 void clear(Queue q){ //清空
59 free(q->data);
60 free(q);
61 }
62
63 int main(){
64 printf("/*****************************************/\n");
65 printf("0代表插入,1代表删除,2代表查看队首元素\n");
66 printf("/*****************************************/\n");
67 Queue q = (Queue)malloc(sizeof(queue));
68 init(q,100);
69 int opr;
70 int value;
71 while(scanf("%d",&opr) != EOF){
72 switch(opr){
73 case 0:
74 printf("插入元素:");
75 scanf("%d",&value);
76 push_queue(q,value);
77 output(q);
78 break;
79 case 1:
80 pop_queue(q);
81 output(q);
82 break;
83 case 2:
84 front(q);
85 break;
86 }
87 }
88 return 0;
89 }
以上是本人对队列操作的理解,欢迎大家指点与修正。后面我会上传栈的基本操作,大家敬请期待。