Démonstration animée de file chaînée (avec nœud principal) Visualisez votre code avec des animations

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

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

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

Que votre objectif soit la réussite d'un examen, le développement professionnel ou un intérêt purement personnel, ce site de visualisation des structures de données et des algorithmes sera une ressource inestimable.

Rendez-vous sur ce site et commencez votre voyage d'apprentissage !

Voici les plus courants : 【Description en langage C】Structures de données et algorithmes Implémentation JAVA des structures de données Fondamentaux des structures de données et algorithmes (Université de Qingdao - Wang Zhuo) Structures de données et algorithmes Structures de données selon Wang Dao Implémentation en langage C des structures de données Cours intensif de structures de données pour les examens de fin de semestre Tutoriel vidéo sur les structures de données en langage C Yan Weimin sur les structures de données Hao Bin sur les structures de données Examen d'entrée en master sur les structures de données Algorithmes et fondamentaux des structures de données en JAVA Structures de données selon Wang Dao 2022 Apprentissage des structures de données Structures de données selon Xiao Jiayu Wang Zhuo Apprentissage des structures de données Structures de données à l'Université du Zhejiang Révision des structures de données Structures de données selon Ma Shibin Cours zéro sur les structures de données Structures de données et algorithmes Introduction aux structures de données Explication des exercices de structures de données pour l'examen d'entrée en master Révision de fin de semestre des structures de données Niveau 2 en informatique