[数据结构]循环队列尾插法

数据结构教程1.9

BaiduShurufa_2016-7-3_12-44-59

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void
en_queen(int x){
tail = (tail+1)%N;//后移一位
if(tail == head){
printf(“out of queen\n”);
if(tail == 0){
tail = N-1;
}
tail–;
return 0;
}
queen[tail-1] = x;//尾插法插入数据。
if(head == -1){ //将head置位
head = 0;
}



printf(“enter queen success!\n”);
}
int
de_queen(){
if(head == tail || head == -1){
printf(“empty of queen!\n”);
return 0;
}
printf(“exit queen success:\n”);
head = (head+1)%N;
return queen[head-1];
}

需要注意的几点:
1、队列不能存满,head == tail || head == -1用来判断队列空的情况。如果队列存满,如下图所示:(tail指向即将插入的元素,队列满的话,tail 与head重合)BaiduShurufa_2016-7-3_13-20-11

head == tail 也表示队列满,此时无法鉴别是队空还是队满。所以队列不能存满,每次先将tail+1,与head比较是否重合,如果重合,则不能再存储数据。如果不重合,则存储在原来的位置。
2、 第一次进队列需要将初始化的head = -1 置为0。
附:
BaiduShurufa_2016-7-3_13-15-0

参考文献:

[1] 蔡子经. 施伯乐[J]. 数据结构教程, 1994.

[2]蔡子经. 施伯乐数据结构教程上海: 复旦大学出版社[J]. I999.