正在载入交互式动画窗口请稍等

队列-链表-带头结点 可视化交互式动画版

图码-数据结构可视化动画版

在本文中,讨论并实现了 队列数据结构 的链表实现。 如果队列为空,则打印“-1”。

方法: 要解决该问题,请遵循以下想法:

我们维护两个指针, front after front 指向队列的第一项, rear 指向最后一项。

  • enQueue(): 该操作在rear后面添加一个新节点 ,并将rear移动 到下一个节点。
  • deQueue(): 该操作删除前面的节点并将前面的节点移动 到下一个节点。

请按照以下步骤解决问题:

  • 创建一个类 QNode,其数据成员为整数 data 和 QNode* next
    • 参数化构造函数,采用整数 x 值作为参数,并将数据设置为等于 x ,并将 next 设置为 NULL
  • 创建一个类Queue,数据成员QNode 前后
  • 带参数 x 的入队操作:
    • 使用 data = x 初始化 QNode* temp
    • 如果后部设置为 NULL,则将前部和后部设置为 temp 并返回(Base Case)
    • 否则将后部设置为 温度旁边,然后将后部移至温度
  • 出队操作:
    • 如果前面设置为NULL则返回(Base Case)
    • 使用 front初始化 QNode temp 并将 front 设置为其下一个
    • 如果前面等于NULL 则将后面设置为NULL
    • 从内存中删除温度

下面是上述方法的实现:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
struct QNode {
    int data;
    QNode* next;
    QNode(int d)
    {
        data = d;
        next = NULL;
    }
};
 
struct Queue {
    QNode *front, *rear;
    Queue() { front = rear = NULL; }
 
    void enQueue(int x)
    {
 
        // Create a new LL node
        QNode* temp = new QNode(x);
 
        // If queue is empty, then
        // new node is front and rear both
        if (rear == NULL) {
            front = rear = temp;
            return;
        }
 
        // Add the new node at
        // the end of queue and change rear
        rear->next = temp;
        rear = temp;
    }
 
    // Function to remove
    // a key from given queue q
    void deQueue()
    {
        // If queue is empty, return NULL.
        if (front == NULL)
            return;
 
        // Store previous front and
        // move front one node ahead
        QNode* temp = front;
        front = front->next;
 
        // If front becomes NULL, then
        // change rear also as NULL
        if (front == NULL)
            rear = NULL;
 
        delete (temp);
    }
};
 
// Driver code
int main()
{
 
    Queue q;
    q.enQueue(10);
    q.enQueue(20);
    q.deQueue();
    q.deQueue();
    q.enQueue(30);
    q.enQueue(40);
    q.enQueue(50);
    q.deQueue();
    cout << "Queue Front : " << ((q.front != NULL) ? (q.front)->data : -1)<< endl;
    cout << "Queue Rear : " << ((q.rear != NULL) ? (q.rear)->data : -1);
}
// This code is contributed by rathbhupendra


            

C

Java

Python3

C#

Javascript

输出

队列前面:40
队列后方:50

时间复杂度: O(1),enqueue()和dequeue()操作的时间复杂度都是O(1),因为它只改变两个操作中的几个指针辅助空间:O(1),两个操作的
辅助 空间enqueue() 和 dequeue() 的复杂度为 O(1),因为需要恒定的额外空间

相关文章:
队列简介及数组实现

无论你的目标是考试成功、职业发展,还是纯粹的兴趣,这个数据结构和算法可视化的网站都会是一个无价的资源。

前往这个网站,开始你的学习之旅吧!

这些是常见的:【C语言描述】《数据结构和算法》数据结构JAVA实现 数据结构与算法基础(青岛大学-王卓)数据结构与算法王道数据结构c语言实现 速成数据结构期末考前救急 数据结构视频C语言版教程 数据结构严蔚敏 数据结构郝斌 数据结构考研 JAVA数据结构算法与基础 数据结构王道 2022数据结构学习 数据结构小甲鱼 王卓 学习数据结构 数据结构浙江大学 数据结构复习 数据结构马士兵 数据结构零基础教程 数据结构和算法 数据结构入门 考研数据结构习题讲解 数据结构期末复习 计算机二级