数据结构队列的实现

声明:本文仅供交流学习使用,严禁利用所学技术违法犯罪,否则后果自负

循环队列问题

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
1,静态队列为什么必须是循环队列
2,循环队列需要几个参数来确定
需要2个参数来确定
2个参数不同场合有不同的含义
font和rear
3,循环队列各个参数的含义
1),队列初始化
font和rear的值都是零
2),队列非空
font代表的是队列的第一个元素
rear代表的是队列的最后一个有效元素
3),队列空
font和rear相等,但是不一定是零
4,循环队列入队伪算法
两步完成
1),将值存入r所代表的位置
2),正确的写法:r = (r+1)%数组的长度
错误的写法:r = r+1
5,循环队列出队伪算法
f = (f + 1)% 数组的长度
6,如何判断循环队列为空
如果front 与 rear 的值相等,即 f = r 该队列为空
7,如何判断循环队列已满
两种方式:
1,多增加一个表标识参数
2,少用一个元素【通常用第二种方式】
1),如果r和f的值紧挨着,则表示队列已满
2),用c语言伪算法表示就是:
if((r+1)%数组长度 == f){以满}
else{不满}

程序实现

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

#include<malloc.h>


typedef struct //定义一个数据类型QUEUE
{
int * pBase;
int front;
int rear;

}QUEUE;
大专栏  数据结构队列的实现span>
void init(QUEUE *);
bool en_queue(QUEUE *, int val);//入队
void traverse_queue(QUEUE *);//遍历队列
bool full_queue(QUEUE *); //判断入队之前是不是已经满了
bool out_queue(QUEUE *, int * ); //出队
bool emput_queue(QUEUE *); //判断出队的时候是否为空

int main(void)
{
QUEUE Q;
int val;

init(&Q);

en_queue(&Q,1);
en_queue(&Q,2);
en_queue(&Q,3);
en_queue(&Q,4);

if(out_queue(&Q,&val))
{
printf("出队成功,队列出队的元素是:%dn" , val);
}
else
{
printf("出队失败n");
}

traverse_queue(&Q);
return 0;


}

void init(QUEUE *pQ)
{
pQ->pBase = (int *)malloc(sizeof(int)*6);
pQ->front = 0;
pQ->rear = 0;

}

bool full_queue(QUEUE *pQ)
{
if((pQ->rear +1)%6 == pQ->front)
return true;
else
return false;
}


bool en_queue(QUEUE * pQ, int val)
{
if(full_queue(pQ))
{
return false;
}
else
{
pQ->pBase[pQ->rear] = val;
pQ->rear = (pQ->rear + 1)%6;
return true;
}

}

void traverse_queue(QUEUE * pQ)//遍历队列
{
int i = pQ->front;
while(i != pQ->rear)
{
printf("%d ",pQ->pBase[i]);
i = (i+1)%6;
}


}

bool emput_queue(QUEUE *pQ)
{
if(pQ->front==pQ->rear)
{
return true;
}
else
{
return false;
}
}


bool out_queue(QUEUE * pQ, int * pVal)
{
if(emput_queue(pQ))
{
return false;
}
else
{
*pVal = pQ->pBase[pQ->front];
pQ->front = (pQ->front+1)%6;
return true;
}


}
1
2
出队成功,出队元素是1,
2,3,4

猜你喜欢

转载自www.cnblogs.com/lijianming180/p/12360818.html