繁体   English   中英

c++中链表实现队列的查询

[英]Query in implementing queue in linked list in c++

我尝试使用链表实现队列。 这是我写的代码。 当我尝试使用 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未正确出列第一个元素:

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

temp = temp->next使temp指向第二个节点,并在下一行中删除第二个节点,而不是第一个节点。

使第二个节点成为新的front并删除旧的front

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM