队列的链式实现(C语言)

来源:互联网 发布:阿里云医疗 编辑:程序博客网 时间:2024/05/22 01:59

/* 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;}

结果:




0 0
原创粉丝点击