next up previous contents
Next: Pointer Queues: queue1 Up: Queues: ADT Previous: Queues: ADT   Contents

Array Queues: queue.dat [34]

> 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; }


Arrays: queue.c [37]
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);
  }
}



Ted Billard 2001-10-25