CS3343/3341
 Analysis of Algorithms 
Spring 2012
  Queues in Java and C   


Queues in Java and C

Queues in Java and C
// Queue.java: simple circular queue of chars
public class Queue {
   private int QSIZE = 4;
   private int q[] = new int[QSIZE];
   private int head = 0;
   private int tail = 0;
   private int size = 0;

   public void enqueue(int x) {
      if (!isFull()) {
         size++;
         q[tail] = x;
         if (tail == QSIZE - 1) tail = 0;
         else tail++;
      }
      else System.out.println("Overflow");
   }

   public int dequeue() {
      if (isEmpty()) {
         System.out.println("Underflow");
         return -1;
      }
      size--;
      int x = q[head];
      if (head == QSIZE - 1) head = 0;
      else head++;
      return x;
   }

   public boolean isEmpty() {
      return size == 0;
   }

   public boolean isFull() {
      return size == QSIZE;
   }

   public int getSize() {
      return size;
   }

   public int getFront() {
      if (!isEmpty())
         return q[head];
      else return -1;
   }

   public void dumpQ(int n) {
      System.out.println("n:" + n +
        ", size:" + size + ", head:" +
        head + ", tail:" + tail +
         ", frontitem:" + getFront());
   }

   public static void main(String[] args) {
      Queue queue = new Queue();
      queue.dumpQ(1);
      queue.enqueue(101);queue.dumpQ(2);
      queue.enqueue(202);queue.dumpQ(2);
      queue.enqueue(303);queue.dumpQ(2);
      System.out.println(queue.dequeue());
         queue.dumpQ(3);
      System.out.println(queue.dequeue());
         queue.dumpQ(3);
      System.out.println(queue.dequeue());
         queue.dumpQ(4);
      System.out.println(queue.dequeue());
         queue.dumpQ(4);
      queue.dumpQ(5);
      queue.enqueue(444);queue.dumpQ(6);
      queue.enqueue(555);queue.dumpQ(7);
      queue.enqueue(666);queue.dumpQ(8);
      queue.enqueue(777);queue.dumpQ(9);
      queue.enqueue(888);queue.dumpQ(10);
      System.out.println(queue.dequeue());
         queue.dumpQ(11);
      System.out.println(queue.dequeue());
         queue.dumpQ(12);
      System.out.println(queue.dequeue());
         queue.dumpQ(13);
      System.out.println(queue.dequeue());
         queue.dumpQ(14);
      System.out.println(queue.dequeue());
         queue.dumpQ(15);
   }
}
// queue.h: header file
int dequeue();
void enqueue(int );
int isempty();
int isfull();
int getfront();
void dumpq();

// queue.c: queue definition #include <stdio.h> #include "queue.h" #define QSIZE 4 int q[QSIZE]; int head = 0; int tail = 0; int size = 0; void enqueue(int x) { if (!isfull()) { size++; q[tail] = x; if (tail == QSIZE - 1) tail = 0; else tail++; } else printf("Overflow\n"); } int dequeue() { int x; if (isempty()) { printf("Underflow\n"); return -1; } size--; x = q[head]; if (head == QSIZE - 1) head = 0; else head++; return x; } int isempty() { return size == 0; } int isfull() { return size == QSIZE; } int getfront() { if (!isempty()) return q[head]; else return -1; } void dumpq(int n) { printf("n:%i, size:%i, head:%i,\ tail:%i, frontitem:%i\n", n, size, head, tail, getfront()); }
// queuemain.c: test queue #include <stdio.h> #include "queue.h" int main() { dumpq(1); enqueue(101);dumpq(2); enqueue(202);dumpq(2); enqueue(303);dumpq(2); printf("%i\n", dequeue());dumpq(3); printf("%i\n", dequeue());dumpq(3); printf("%i\n", dequeue());dumpq(4); printf("%i\n", dequeue());dumpq(4); dumpq(5); enqueue(444);dumpq(6); enqueue(555);dumpq(7); enqueue(666);dumpq(8); enqueue(777);dumpq(9); enqueue(888);dumpq(10); printf("%i\n", dequeue());dumpq(11); printf("%i\n", dequeue());dumpq(12); printf("%i\n", dequeue());dumpq(13); printf("%i\n", dequeue());dumpq(14); printf("%i\n", dequeue());dumpq(15); }
Common Output
n:1, size:0, head:0, tail:0, frontitem:-1
n:2, size:1, head:0, tail:1, frontitem:101
n:2, size:2, head:0, tail:2, frontitem:101
n:2, size:3, head:0, tail:3, frontitem:101
101
n:3, size:2, head:1, tail:3, frontitem:202
202
n:3, size:1, head:2, tail:3, frontitem:303
303
n:4, size:0, head:3, tail:3, frontitem:-1
Underflow
-1
n:4, size:0, head:3, tail:3, frontitem:-1
n:5, size:0, head:3, tail:3, frontitem:-1
n:6, size:1, head:3, tail:0, frontitem:444
n:7, size:2, head:3, tail:1, frontitem:444
n:8, size:3, head:3, tail:2, frontitem:444
n:9, size:4, head:3, tail:3, frontitem:444
Overflow
n:10, size:4, head:3, tail:3, frontitem:444
444
n:11, size:3, head:0, tail:3, frontitem:555
555
n:12, size:2, head:1, tail:3, frontitem:666
666
n:13, size:1, head:2, tail:3, frontitem:777
777
n:14, size:0, head:3, tail:3, frontitem:-1
Underflow
-1
n:15, size:0, head:3, tail:3, frontitem:-1


Revision date: 2011-10-31. (Please use ISO 8601, the International Standard Date and Time Notation.)