天天看点

【C语言】链表实现队列

【C语言】链表实现队列

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

typedef struct Node
{
    int data;
    struct Node *next;
} Node, *Queue;

typedef struct 
{
    Queue front;
    Queue rear;
} LinkQueue;

void initQueue(LinkQueue *q)
{
    Queue p = (Queue)malloc(sizeof(Node));
    if (p == NULL) {
        return;
    }
    p->data = 0;
    p->next = NULL;

    q->front = p;
    q->rear = p;
    q->front->next = NULL;

    return;
}

int isEmpty(LinkQueue *q)
{
    return q->front == q->rear ? 1 : 0;
}

void insertQueue(LinkQueue *q, int a)
{
    Queue p = (Queue)malloc(sizeof(Node));
    if (p == NULL) {
        return;
    }
    p->data = a;
    p->next = NULL;

    q->rear->next = p;
    q->rear = p;
    return;
} 

void deQueue(LinkQueue *q)
{
    Queue p = NULL;
    if (!isEmpty(q)) {
        p = q->front->next;
        q->front->next = p->next;
        if (p == q->rear) {
            q->front = q->rear;
        }
        free(p);
    }
    return;
}

void traversalQueue(LinkQueue *q)
{
    int i = 1;
    if (!isEmpty(q)) {
        Queue p = q->front->next;
        while (p != NULL) {
            printf("\n第%d个元素是%d", i, p->data);
            p = p->next;
            i++;
        }
    } else {
        printf("\n空队列!");
    }
    return;
}

void destroyQueue(LinkQueue *q)
{
    if (!isEmpty(q)) {
        while (q->front != NULL) {
            q->rear = q->front->next;
            free(q->front);
            q->front = q->rear;
        }
    }
    return;
}

int main(void)
{
    LinkQueue p;
    initQueue(&p);

    //printf("\n激活函数!");
    puts("\n初始化队列,0, 1, 2, 3");
    insertQueue(&p, 0);
    insertQueue(&p, 1);
    insertQueue(&p, 2);
    insertQueue(&p, 3);
    traversalQueue(&p);

    puts("\n第一个元素出队列");
    deQueue(&p);
    traversalQueue(&p);
    puts("\n第二个元素出队列");
    deQueue(&p);
    traversalQueue(&p);
    puts("\n第三个元素出队列");
    deQueue(&p);
    traversalQueue(&p);
    puts("\n第四个元素出队列");
    deQueue(&p);
    traversalQueue(&p);

    destroyQueue(&p);
    traversalQueue(&p);
    return 0;
}
           

C语言链表方式实现队列

继续阅读