/* Queue.h */
#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
struct Queue_Array {
int element;
struct Queue_Array* next;
};
typedef struct Queue_Array* Q_Array;
struct _Queue {
Q_Array q;
Q_Array Front;
Q_Array Rear;
};
typedef struct _Queue* Queue;
/* Queue Operation */
int isEmpty(Queue Q);
void CreateQueue(Queue Q);
void make_Queue_Empty(Queue Q);
void Enqueue(int Elmt, Queue Q);
int Front(Queue Q);
void Dequeue(Queue Q);
int FrontAndDequeue(Queue Q);
void printQueue(Queue Q);
#endif // QUEUE_H_INCLUDED
/* Queue.c */
#include "Queue.h"
int isEmpty(Queue Q) {
return (Q->Front == Q->Rear);
}
void CreateQueue(Queue Q) {
Q_Array q = (Q_Array)malloc(sizeof(struct Queue_Array));
q->element = 0;
q->next = NULL;
Q->Front = Q->Rear = q;
}
void Enqueue(int Elmt, Queue Q) {
Q_Array q = (Q_Array) malloc (sizeof(struct Queue_Array));
q->element = Elmt;
q->next = NULL;
Q->Rear->next = q;
Q->Rear = q;
}
int Front(Queue Q) {
return Q->Front->element;
}
void Dequeue(Queue Q) {
Q_Array q = Q->Front;
Q->Front = Q->Front->next;
free(q);
}
int FrontAndDequeue(Queue Q) {
int frontElmt;
Q_Array q = Q->Front;
frontElmt = q->element;
Q->Front = Q->Front->next;
free(q);
return frontElmt;
}
void make_Queue_Empty(Queue Q) {
Q_Array q = Q->Front;
while(q != Q->Rear) {
Q->Front = Q->Front->next;
free(q);
q = Q->Front;
}
Q->Front = Q->Rear = NULL;
Q->q = NULL;
free(q);
}
void printQueue(Queue Q) {
Q_Array q = Q->Front;
while (q != Q->Rear->next) {
printf("%d ", q->element);
q = q->next;
}
printf("\n");
}
测试:
/* main.c */
#include "Queue.h"
int main()
{
Queue Q = (Queue) malloc (sizeof(struct _Queue));
Q->Front = NULL;
Q->q = NULL;
Q->Rear = NULL;
CreateQueue(Q);
Enqueue(1, Q);
Enqueue(3, Q);
Enqueue(5, Q);
Enqueue(7, Q);
Enqueue(9, Q);
Enqueue(11, Q);
printQueue(Q);
Dequeue(Q);
printQueue(Q);
printf("Queue's front element is %d\n", Front(Q));
FrontAndDequeue(Q);
printf("Queue's front element is %d\n", Front(Q));
printQueue(Q);
return 0;
}
结果: