CÀI ĐẶT QUEUE BẰNG CON TRỎ


CHƯƠNG TRÌNH MẪU

Code:

#include "conio.h"
#include "stdio.h"
#include "alloc.h"

typedef int ElementType;
typedef struct Node{
   ElementType Element;
   Node* Next;
};
typedef struct{
   Node* Front;
   Node* Rear;
}Queue;
//Make null a queue
Queue MakeNull_Queue(){
   Queue temp;
   Node* Header = (Node*)malloc(sizeof(Node));
   Header->Next = NULL;
   temp.Front = Header;
   temp.Rear = Header;
   return temp;
}
//Result 0 if queue is null else result 1
char Empty_Queue(Queue Q){
   return (Q.Front==Q.Rear);
}
//Insert a element on bottom queue
void Push(ElementType X, Queue &Q){
   Q.Rear->Next = (Node*)malloc(sizeof(Node));
   Q.Rear = Q.Rear->Next;
   Q.Rear->Element = X;
   Q.Rear->Next = NULL;
}
//Delete a element out queue
void Pop(Queue &Q){
   if (!Empty_Queue(Q)){
      Node* temp = Q.Front->Next;
      Q.Front->Next = temp->Next;
      free(temp);
   }
   else
      printf("\tQueue is empty");
}
//Input n elements from keyboard and save on a queue
Queue Input_Queue(unsigned int n){
   Queue temp = MakeNull_Queue();
   ElementType x;
   for(unsigned int i = 1; i<=n; i++){
      printf("Value %d = ",i);
      scanf("%d",&x);
      Push(x,temp);
   }
   return temp;
}
//Print a queue out screen
void Output_Queue(Queue Q){
   if(!Empty_Queue(Q)){
      Queue temp = Q;
      while(!Empty_Queue(temp)){
         printf("\t%d", temp.Front->Next->Element);
         temp.Front = temp.Front->Next;
      }
   }
}
//the main programming
void main(){
   clrscr();
   Queue Q;
   unsigned int n;
   printf("\nInput n = ");
   scanf("%d",&n);
   Q = Input_Queue(n);
   printf("This queue:\n");
   Output_Queue(Q);
   getch();
}