-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArrayQueue.c
More file actions
86 lines (83 loc) · 1.64 KB
/
ArrayQueue.c
File metadata and controls
86 lines (83 loc) · 1.64 KB
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
#include "basiclib.h"
#include "ArrayQueue.h"
#define T ArrayQueue
struct T
{
int capacity;
int front;
int rear;
int size;
QueueElementType *array;
};
T AQ_CreateQueue(int capacity)
{
T queue = MALLOC(sizeof(struct T));
queue->array = MALLOC(sizeof(QueueElementType) * capacity);
queue->capacity = capacity;
queue->front = 0;
queue->rear = 0;
queue->size = 0;
return queue;
}
void AQ_MakeEmpty(T queue)
{
queue->size = 0;
queue->front = queue->rear = 0;
}
//enter the queue
void AQ_Enqueue(T queue, QueueElementType value)
{
if(AQ_isFull(queue))
{
fprintf(stderr, "The queue is full\n");
return;
}
else
{
queue->size++;
queue->array[queue->rear] = value;
queue->rear = (queue->rear+1)%queue->capacity;
}
}
//out the queue
void AQ_Dequeue(T queue)
{
if(AQ_isEmpty(queue))
{
fprintf(stderr, "The queue is empty\n");
return;
}
else
{
queue->size--;
queue->front = (queue->front+1)%queue->capacity;
}
}
//get the first node of the queue, not delete
QueueElementType AQ_Front(T queue) //get the front value but not dequeue
{
if(AQ_isEmpty(queue))
{
printf("The queue is empty\n");
exit(EXIT_FAILURE);
}
else
{
return queue->array[queue->front];
}
}
//out the queue and get the node
QueueElementType AQ_FrontAndDequeue(T queue)
{
QueueElementType data = AQ_Front(queue);
AQ_Dequeue(queue);
return data;
}
int AQ_isEmpty(T queue)
{
return queue->size == 0;
}
int AQ_isFull(T queue)
{
return queue->size == queue->capacity;
}