Анимационная демонстрация очереди на связном списке (с головным узлом) Визуализируйте свой код с помощью анимации

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

在本文中,讨论并实现了 队列数据结构 的链表实现。 如果队列为空,则打印“-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 Изучение структур данных Структуры данных Маленькая черепаха Ван Чжо Изучение структур данных Структуры данных Чжэцзянский университет Повторение структур данных Структуры данных Ма Шибин Учебник по структурам данных с нуля Структуры данных и алгоритмы Введение в структуры данных Объяснение задач по структурам данных для вступительных экзаменов в аспирантуру Повторение структур данных к финальному экзамену Компьютерный уровень 2