[英]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.