CÀI ĐẶT QUEUE BẰNG MẢNG THEO PHƯƠNG PHÁP TỊNH TUYẾN
CẤU TRÚC DỮ LIỆU
Code:
define MaxLength 100
#define Null -1
typedef int ElementType;
typedef struct {
ElementType Elements[MaxLength];
unsigned int Front, Rear;
}Queue;
CHƯƠNG TRÌNH MẪU
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;
}
//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))
{
S.Front++;
if(S.Front>S.Rear)
S = MakeNull_Queue();
}
else
printf("\tEmpty queue!");
}
//Insert a value on end 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 = S.Rear-S.Front + 1;
for(unsigned int i = 0; i<S.Rear; i++)
S.Elements[i] = S.Elements[i+S.Front-1];
S.Front = 1;
}
S.Elements[S.Rear] = X;
S.Rear++;
}
}
//Print a queue to screen
void Out_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");
Out_Queue(S);
getch();
}