-
Notifications
You must be signed in to change notification settings - Fork 1
/
011_10.1_QueueArray.c
101 lines (74 loc) · 1.48 KB
/
011_10.1_QueueArray.c
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Queue
{
int nHead;
int nTail;
int nLen;
int *pnArr;
}Queue, *PQueue;
PQueue Create(int nLen) {
if (nLen <= 0) {
return NULL;
}
PQueue pQueue = (PQueue)malloc(sizeof(Queue));
pQueue->nLen = nLen;
pQueue->nHead = 0;
pQueue->nTail = 0;
pQueue->pnArr = (int *)malloc(sizeof(int) * nLen);
return pQueue;
}
bool IsEmpty(PQueue pQueue)
{
return pQueue->nHead == pQueue->nTail;
}
bool IsFull(PQueue pQueue)
{
return pQueue->nTail == pQueue->nLen;
}
void EnQueue(PQueue pQueue, int nValue) {
if (NULL == pQueue || pQueue->pnArr == NULL) {
printf("队列未创建成功!\n");
return;
}
if (IsFull(pQueue)) {
printf("队列已满!\n");
return;
}
pQueue->pnArr[pQueue->nTail] = nValue;
pQueue->nTail++;
}
int DeQueue(PQueue pQueue) {
if (NULL == pQueue || pQueue->pnArr == NULL) {
printf("队列未创建成功!\n");
exit(0);
}
if (pQueue->nHead == pQueue->nTail) {
printf("队列已空!\n");
exit(0);
}
int nValue = pQueue->pnArr[pQueue->nHead];
pQueue->nHead++;
return nValue;
}
void Destroy(PQueue pQueue)
{
free(pQueue->pnArr);
pQueue->pnArr = NULL;
free(pQueue);
pQueue = NULL;
}
void main()
{
PQueue pQueue = Create(10);
for (int i = 0; i < 12; i++)
{
EnQueue(pQueue, i);
}
//printf("%d \n", IsFull(pQueue));
while (!IsEmpty(pQueue))
{
printf("%d ", DeQueue(pQueue));
}
}