美文网首页
数据结构【动态队列】代码实现

数据结构【动态队列】代码实现

作者: Sky_Mao | 来源:发表于2019-10-18 19:39 被阅读0次

队列是使用链表实现,包含队列的初始化、入队、出队、输出队列内容、判断队列内容是否为空

#include <iostream>

//链表节点
typedef struct Node
{
    int nData;
    Node *pNext;
}*PNODE;

//队列
//队列有两个指针记录数据,front、rear
typedef struct Queue
{
    PNODE pFront;
    PNODE pRear;
}*PQUEUE;

//初始化队列
void init_queue(PQUEUE pQueue);
void push_queue(PQUEUE pQueue, const int& nValue);
void pop_queue(PQUEUE pQueue);
void show_queue(const PQUEUE pQueue);
bool isEmpty_queue(const PQUEUE pQueue);


int main()
{
    Queue oQueue;
    init_queue(&oQueue);
    push_queue(&oQueue, 1);
    push_queue(&oQueue, 2);
    push_queue(&oQueue, 3);
    push_queue(&oQueue, 4);
    push_queue(&oQueue, 40);
    push_queue(&oQueue, 88);
    push_queue(&oQueue, 99);
    show_queue(&oQueue);

    pop_queue(&oQueue);
    pop_queue(&oQueue);
    pop_queue(&oQueue);
}

//初始化队列
void init_queue(PQUEUE pQueue)
{
    //初始化的时候,申请一个无效节点(不存储任何内容)
    //让队首、队尾都指向这个无效节点
    pQueue->pRear = (PNODE)malloc(sizeof(Node));
    if (nullptr == pQueue->pRear)
    {
        std::cout << "申请内存失败" << std::endl;
        exit(-1);
    }
    pQueue->pRear->pNext = nullptr;

    //队首指向队尾
    pQueue->pFront = pQueue->pRear;
}

//入队
void push_queue(PQUEUE pQueue, const int& nValue)
{
    //插入需要从队尾插入
    PNODE pNewNode = (PNODE)malloc(sizeof(Node));
    if (nullptr == pQueue->pRear)
    {
        std::cout << "申请内存失败" << std::endl;
        exit(-1);
    }
    pNewNode->pNext = nullptr;

    //由于队尾永远指向一个无效的节点,所以这里直接把数据存储到队尾节点即可
    pQueue->pRear->nData = nValue;
    //然后把申请好的无效节点与队尾连接起来,避免丢失节点
    pQueue->pRear->pNext = pNewNode;
    //让队尾指向新加的无效节点,就等于rear + 1
    pQueue->pRear = pNewNode;
}

//出队
void pop_queue(PQUEUE pQueue)
{
    if (isEmpty_queue(pQueue))
    {
        return;
    }

    //出队从队首弹出
    //先记录队首的节点
    PNODE pTempNode = pQueue->pFront;
    //队首指向队首的下一个节点,相当于front + 1
    pQueue->pFront = pQueue->pFront->pNext;

    std::cout << "弹出的元素为:" << pTempNode->nData << std::endl;

    //释放内存
    free(pTempNode);
}

//输出队列内容
void show_queue(const PQUEUE pQueue)
{
    PNODE pNode = pQueue->pFront;
    while (pNode != pQueue->pRear)
    {
        std::cout << pNode->nData << "\t";
        pNode = pNode->pNext;
    }

    //输出完以后换个行
    std::cout << "\n";
}

//队列是否为空
bool isEmpty_queue(const PQUEUE pQueue)
{
    if (pQueue->pFront == pQueue->pRear)
    {
        return true;
    }

    return false;
}

相关文章

  • ARTS-第三周

    Algorithm 这周实现了最基本的动态数据结构链表,并用数组和链表分别实现了栈和队列。 git代码地址 数组和...

  • 数据结构【动态队列】代码实现

    队列是使用链表实现,包含队列的初始化、入队、出队、输出队列内容、判断队列内容是否为空

  • c++ 实现队列

    相关资料: 用C++实现一个队列 数据结构代码实现之队列的链表实现(C/C++)

  • C语言数据结构——线性表链式循环队列(链表实现方式)

    队列相关知识及操作请参看上一章 C语言数据结构——线性表循环队列(动态数组实现方式) 一、链式队列 链式队列 : ...

  • ArrayList和LinkList的区别

    ArrayList:是Array的数据结构,Array是动态数组,是对List接口的实现,他是数组队列,相当于动态...

  • C语言数据结构——线性表循环队列(静态数组实现方式)

    队列相关知识及操作请参看上一章 C语言数据结构——线性表循环队列(动态数组实现方式) 一、队列数据类型定义 二、队...

  • 队列

    核心思想: 队列是一种数据结构,类似于栈,先进先出。 以上代码有问题 下面用循环队列实现: 代码改动:

  • 栈和队列

    目录 1、引言2、栈3、队列 引言 栈和队列都是动态集合,可以理解为线性表或线性表实现的数据结构。它可以由数组实现...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 栈、队列和链表

    基本数据结构 栈和队列 栈和队列都是动态集合。栈实现的是一种后进先出策略。队列是一种先进先出策略。 栈 栈上的in...

网友评论

      本文标题:数据结构【动态队列】代码实现

      本文链接:https://www.haomeiwen.com/subject/tnewmctx.html