> s 0 1 2 3 4 5 6 7 8 9
+------------------------------+
| -1 -1 -1 -1 -1 -1 -1 -1 -1 -1|
+------------------------------+
^ ^
r f
> e 4 e 8 e 5 e 2 e 7 e 1 s
+------------------------------+
| -1 4 8 5 2 7 1 -1 -1 -1|
+------------------------------+
^ ^
f r
> D D s
Dequeue: 4 +------------------------------+
Dequeue: 8 | -1 -1 -1 5 2 7 1 -1 -1 -1|
+------------------------------+
^ ^
f r
> e 6 e 2 e 4 D D D D D s
Dequeue: 5 +------------------------------+
Dequeue: 2 | -1 -1 -1 -1 -1 -1 -1 -1 2 4|
Dequeue: 7 +------------------------------+
Dequeue: 1 ^ ^
Dequeue: 6 f r
Queues: queue.dat [35]
e 1 s 0 1 2 3 4 5 6 7 8 9
+------------------------------+
| 1 -1 -1 -1 -1 -1 -1 -1 2 4|
+------------------------------+
^ ^
r f
> e 3 D D s
Dequeue: 2 +------------------------------+
Dequeue: 4 | 1 3 -1 -1 -1 -1 -1 -1 -1 -1|
+------------------------------+
^ ^
f r
> D s
Dequeue: 1 +------------------------------+
| -1 3 -1 -1 -1 -1 -1 -1 -1 -1|
+------------------------------+
^
f and r
> D s
Dequeue: 3 +------------------------------+
| -1 -1 -1 -1 -1 -1 -1 -1 -1 -1|
+------------------------------+
^ ^
r f
Queues: queue.c [36]
struct queue_record {
unsigned int q_max_size;
unsigned int q_front;
unsigned int q_rear;
unsigned int q_size;
element_type *q_array;
};
typedef struct queue_record *QUEUE;
void make_null(QUEUE Q) {
int i;
Q->q_size = 0; Q->q_front = 1; Q->q_rear = 0;
for (i=0; i<Q->q_max_size; i++) Q->q_array[i] = EMPTY;
}
QUEUE create_queue(unsigned int max_elements) {
QUEUE Q;
Q = (QUEUE) malloc(sizeof(struct queue_record));
if (Q == NULL) printf("Out of space!\n");
else {
Q->q_array = (element_type *) malloc(sizeof(element_type)*(max_elements));
Q->q_max_size = max_elements;
make_null(Q);
}
return Q; }
unsigned int succ(unsigned int value, QUEUE Q) {
if (++value == Q->q_max_size)
value = 0;
return value;
}
void enqueue(element_type x, QUEUE Q) { /* O( ) */
if (is_full(Q)) printf("Full queue\n");
else {
Q->q_size++;
Q->q_rear = succ(Q->q_rear,Q);
Q->q_array[Q->q_rear] = x;
}
}
element_type dequeue(QUEUE Q) { /* O( ) */
element_type x;
if (is_empty(Q)) printf("Empty queue\n");
else {
x = Q->q_array[Q->q_front];
Q->q_array[Q->q_front] = EMPTY;
Q->q_size--;
Q->q_front = succ(Q->q_front,Q);
return(x);
}
}