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