Demostración animada de cola enlazada (con nodo cabecera) Visualiza tu código con animaciones

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

在本文中,讨论并实现了 队列数据结构 的链表实现。 如果队列为空,则打印“-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),因为需要恒定的额外空间

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

Ya sea que tu objetivo sea aprobar exámenes, avanzar en tu carrera o simplemente por interés puro, este sitio web de visualización de estructuras de datos y algoritmos será un recurso invaluable.

¡Visita este sitio web y comienza tu viaje de aprendizaje!

Estos son comunes: [Descripción en C] Estructuras de datos y algoritmos Implementación en JAVA de estructuras de datos Fundamentos de estructuras de datos y algoritmos (Universidad de Qingdao - Wang Zhuo) Estructuras de datos y algoritmos Estructuras de datos de Wang Dao Implementación en C de estructuras de datos Curso intensivo de estructuras de datos para salvar el examen final Tutorial en video de estructuras de datos en C Yan Weimin de estructuras de datos Hao Bin de estructuras de datos Examen de posgrado en estructuras de datos Algoritmos y fundamentos de estructuras de datos en JAVA Estructuras de datos de Wang Dao 2022 Aprendizaje de estructuras de datos Pequeña tortuga de estructuras de datos Wang Zhuo Aprendizaje de estructuras de datos Estructuras de datos de la Universidad de Zhejiang Repaso de estructuras de datos Soldado Ma de estructuras de datos Tutorial básico de estructuras de datos Estructuras de datos y algoritmos Introducción a estructuras de datos Explicación de ejercicios de estructuras de datos para examen de posgrado Repaso final de estructuras de datos Nivel 2 de informática