链式队列的基本操作与实现

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <iostream>

typedef int ElementType;

//定义结点
typedef struct LinkNode{
    ElementType data;
    struct LinkNode* next;
} *StackNode, *QueueNode;
//定义队列
typedef struct {
    LinkNode *front, *rear;
} LinkQueue;

//初始化队列
LinkQueue* InitQueue(LinkQueue* L){
    printf("初始化队列\n");
    L = (LinkQueue*)malloc(sizeof(LinkQueue));
    //L->rear = L->front = NULL;
    L->front = L->rear = (LinkNode*)malloc(sizeof(LinkNode));
    L->front->next = NULL;
    return L;
}
//判断队列是否为空
bool IsQueueEmpty(LinkQueue* L){
    if (L->front == L->rear){
        printf("队列为空\n");
        return false;
    }
    return true;
}
//入队
LinkQueue* EnQueue(LinkQueue* Queue, ElementType data){
    LinkNode* L = (LinkNode*)malloc(sizeof(LinkNode));
    L->data = data;
    L->next = NULL;
    Queue->rear->next = L;
    Queue->rear = L;
    printf("入队元素为:%d\n", Queue->rear->data);
    return Queue;
}
//出队
LinkQueue* DeQueue(LinkQueue* L){
    if (IsQueueEmpty(L) == false){
        printf(":所以不能出队!\n");
        return NULL;
    }
    printf("出队元素是:%d\n", L->front->next->data);

    //用这一句就够了 
    //L->front = L->front->next;
    //为了严谨,用一下语句 

    LinkNode* node = (LinkNode*)malloc(sizeof(LinkNode));
    node = L->front->next;
    //printf("L->front=%d\n", L->front->data);
    L->front->next = node->next;
    //printf("L->front=%d\n", L->front->data);
    if (L->rear == node)
        L->front = L->rear;

    //printf("对头元素是:%d\n", L->front->next->data);
    free(node);
    return L;
}

// int main(void){
//     LinkQueue* Queue;
//     Queue = InitQueue(Queue);
//     if (IsQueueEmpty(Queue) == true)
//         printf("初始化为空成功");

//     EnQueue(Queue, 1);EnQueue(Queue, 2);
//     EnQueue(Queue, 3);EnQueue(Queue, 4);EnQueue(Queue, 5);
//     DeQueue(Queue);DeQueue(Queue);
//     DeQueue(Queue);DeQueue(Queue);DeQueue(Queue);

//     system("pause");
//     return 0;
// }

猜你喜欢

转载自blog.csdn.net/qq_28301007/article/details/78424093