CÀI ĐẶT QUEUE BẰNG MẢNG XOAY VÒNG



Code:

#include "conio.h"
#include "stdio.h"
#define MaxLength 100
#define Null -1

typedef int ElementType;
typedef struct {
   ElementType Elements[MaxLength];
   unsigned int Front, Rear;
}Queue;
//Make null a queue
Queue MakeNull_Queue() {
   Queue temp;
   temp.Front = 0;
   temp.Rear = 0;
   return temp;
}
//Result 1 if queue is null else result 0
char Empty_Queue(Queue S){
   return S.Rear==0;
}
//Result 1 if queue is full else result 0
char Full_Queue(Queue S){
   return (S.Rear-S.Front+1 % MaxLength)==0;
}
//Get a value from top queue
ElementType Top(Queue S){
   if (!Empty_Queue(S))
      return S.Elements[S.Front-1];
   else {
      printf("\tEmpty queue!");
      return Null;
   }
}
//Delete a value from top queue
void Pop(Queue &S){
   if (!Empty_Queue(S))
   {
      if (S.Front == S.Rear)
         S = MakeNull_Queue();
      else
      if(S.Front == MaxLength)
         S.Front = 1;
      else
         S.Front++;
   }
   else
      printf("\tEmpty queue!");
}
//Insert a value on bottom queue
void Push(ElementType X, Queue &S){
   if (Full_Queue(S))
      printf("Full queue!");
   else {
      if(Empty_Queue(S))
         S.Front = 1;
      if(S.Rear == MaxLength)
         S.Rear = 0;
      S.Elements[S.Rear] = X;
      S.Rear++;
   }
}
//Print a queue to Dos screen
void Output_Queue(Queue S) {
   Queue temp = S;
   while(!Empty_Queue(temp)) {
      printf("%d\t",Top(temp));
      Pop(temp);
   }
}
//Input a queue with n elements from keyboard
Queue Input_Queue(unsigned int n) {
   Queue S = MakeNull_Queue();
   ElementType x;
   for(int i = 0; i<n; i++) {
      printf("\tValue %d :",i);
      scanf("%d",&x);
      Push(x,S);
   }
   return S;
}
//the main programming
void main() {
   clrscr();
   unsigned int n;
   printf("Input n = ");
   scanf("%d",&n);
   Queue S = Input_Queue(n);
   printf("This queue:\n");
   Output_Queue(S);
   getch();
}