队列基本操作(链表)

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
typedef int QDataType;

typedef struct QNode {
    QDataType   data;
    struct QNode *pNext;
}   QNode;

typedef struct Queue {
    QNode *pFront;
    QNode *pRear;
    int size;
} Queue;


//创建结点
QNode* Create(QDataType data);

// 初始化 
void QueueInit(Queue *pQueue);

// 入队列 
void QueuePush(Queue *pQueue, QDataType data);

// 出队列 
void QueuePop(Queue *pQueue);

// 返回队首元素 
QDataType QueueFront(Queue *pQueue);

// 判断是否为空 
// 1 空 
// 0 不空 
int QueueIsEmpty(Queue *pQueue);

// 返回数据个数 
int QueueSize(Queue *pQueue);
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"



//创建结点
QNode* Create(QDataType data)
{
    QNode *p = NULL;
    p = (QNode*)malloc(sizeof(QNode));
    p->data = data;
    p->pNext = NULL;
    return p;
}

//初始化函数
void QueueInit(Queue *pQueue)
{
    if (pQueue == NULL)
    {
        return;
    }
    pQueue->pFront = NULL;
    pQueue->pRear = NULL;
    pQueue->size = 0;
}

// 入队列 
void QueuePush(Queue *pQueue, QDataType data)
{
    if (pQueue == NULL)
    {
        return;
    }
    QNode *NewNode = Create(data);
    if (pQueue->pFront == NULL && pQueue->pRear == NULL)//如果队列为空
    {
        pQueue->pFront = NewNode;
        pQueue->pRear = NewNode;
        pQueue->size++;
        return;
    }
    pQueue->pRear->pNext = NewNode;//如果队列不为空
    pQueue->pRear = NewNode;
    pQueue->size++;
}

// 出队列 
void QueuePop(Queue *pQueue)
{
    if (pQueue == NULL)
    {
        return;
    }
    if (pQueue->pFront == NULL && pQueue->pRear == NULL)//如果队列为空
    {
        printf("队列为空\n");
        return;
    }
    if (pQueue->pFront == pQueue->pRear)//如果队列只有一个元素
    {
        QNode *p = pQueue->pFront;
        pQueue->pFront = NULL;
        pQueue->pRear = NULL;
        pQueue->size--;
        free(p);
        p = NULL;
        return;
    }
    Queue *q = pQueue->pFront;
    pQueue->pFront = pQueue->pFront->pNext;
    pQueue->size--;
    free(q);
    q = NULL;
}

// 返回队首元素 
QDataType QueueFront(Queue *pQueue)
{
    if (pQueue == NULL)
    {
        return;
    }
    if (pQueue->pFront == NULL)
    {
        printf("队列为空\n");
        return;
    }
    return pQueue->pFront->data;
}

// 判断是否为空 
// 1 空 
// 0 不空 
int QueueIsEmpty(Queue *pQueue)
{
    if (pQueue == NULL)
    {
        return;
    }
    if (pQueue->size == 0)
    {
        return 1;
    }
    return 0;
}

// 返回数据个数 
int QueueSize(Queue *pQueue)
{
    if (pQueue == NULL)
    {
        return;
    }
    return pQueue->size;
}

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"

#define FUNHEAD printf("\n====================%s===================\n",__FUNCTION__);



//入队列测试函数
void TestPush()
{
    FUNHEAD;
    Queue queue;
    QueueInit(&queue);
    QueuePush(&queue, 1);
    QueuePush(&queue, 2);
    QueuePush(&queue, 3);
    QueuePush(&queue, 4);
    QueuePush(&queue, 5);
    QDataType ret = QueueFront(&queue);
    printf("%d\n", ret);
}

//出队列测试函数
void TestPop()
{
    FUNHEAD;
    Queue queue;
    QueueInit(&queue);
    QueuePush(&queue, 1);
    QueuePush(&queue, 2);
    QueuePush(&queue, 3);
    QueuePush(&queue, 4);
    QueuePush(&queue, 5);
    QDataType ret = QueueFront(&queue);
    printf("%d\n", ret);
    QueuePop(&queue);
    ret = QueueFront(&queue);
    printf("%d\n", ret);
}

//返回队首元素测试函数
void TestFront()
{
    FUNHEAD;
    Queue queue;
    QueueInit(&queue);
    QueuePush(&queue, 1);
    QueuePush(&queue, 2);
    QueuePush(&queue, 3);
    QueuePush(&queue, 4);
    QDataType ret = QueueFront(&queue);
    printf("%d\n", ret);
}

//判断队列是否为空测试函数
void TestEmpty()
{
    FUNHEAD;
    Queue queue;
    QueueInit(&queue);
    QueuePush(&queue, 1);
    QueuePush(&queue, 2);
    int ret = QueueIsEmpty(&queue);
    if (ret == 1)
    {
        printf("队列为空\n");
    }
    else {
        printf("队列不为空\n");
    }
}

// 返回数据个数测试函数
void TestSize()
{
    FUNHEAD;
    Queue queue;
    QueueInit(&queue);
    QueuePush(&queue, 1);
    QueuePush(&queue, 2);
    QueuePush(&queue, 3);
    QueuePush(&queue, 4);
    printf("size = %d\n", QueueSize(&queue));
}

int main()
{
    TestPush();
    TestPop();
    TestFront();
    TestEmpty();
    TestSize();
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lly17792230965/article/details/81301368
今日推荐