【问题标题】:Query in implementing queue in linked list in c++查询在C++中实现链表中的队列
【发布时间】:2021-10-19 10:12:35
【问题描述】:

我尝试使用链表实现队列。这是我写的代码。当我尝试使用 disp() 方法时,我得到一个无限循环运行。我无法在逻辑中找到错误。我不明白while(temp!=NULL) 和增加 temp 的行是如何永无止境的。

 #include<iostream>
using namespace std;

struct node{
    int x;
    node *next;
};

class queue{
    node *front,*rear;
    public:
        queue(){
            front = NULL;
            rear= NULL;
        }
        
        void enqueue(int x){
            node *temp=new node;
            temp->x=x;
            temp->next=NULL;
            if(rear==NULL){
                rear=temp;
                front = temp;
            }
            else{
                rear->next=temp;
                rear=temp;
            }
        }
        
        int dequeue(){
            node *temp =front;
            if(temp!=NULL){
                int x =temp->x;
                temp=temp->next;
                delete temp;
                return x;
            }
            else{
                return -1e7;
            }
        }
        
        void disp(){
            node *temp=front;
            while(temp!=NULL){
                cout<<temp->x<<" ";
                temp=temp->next;
            }
            
        }
};

int main(){
    int n;
    cin>>n;
    queue obj;
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        obj.enqueue(x);
    }
    
    int x,y;
    cin>>x>>y;
    obj.enqueue(x);
    obj.enqueue(y);
    
    obj.dequeue();
    obj.disp();
}

【问题讨论】:

  • 请在问题中包含输入、输出和预期输出
  • dequeue() 应该删除队列中的哪个元素?总是第二个元素?
  • @463035818_is_not_a_number 感谢您的解释。理解我的错误

标签: c++ algorithm linked-list queue dsa


【解决方案1】:

您的 dequeue 没有正确地将第一个元素出列:

        node *temp =front;
        if(temp!=NULL){
            int x =temp->x;
            temp=temp->next;
            delete temp;
            return x;
        }

temp = temp-&gt;next 使temp 指向第二个节点,然后在下一行删除第二个节点,而不是第一个。

将第二个节点设为新的front,删除旧的front

        node *temp = front;
        if(temp != NULL){
            int x = temp->x;
            front = temp->next;   // <---
            delete temp;
            return x;
        }

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2021-07-24
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2021-05-20
    • 2020-04-17
    相关资源
    最近更新 更多