C++链表队列实现中的查询
Query in implementing queue in linked list in c++
我试过用链表实现队列。这是我写的代码。当我尝试使用 disp() 方法时,我得到了一个无限循环 运行。我找不到逻辑中的错误。我无法理解 while(temp!=NULL)
行和递增温度如何永无止境。
#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;
}
我试过用链表实现队列。这是我写的代码。当我尝试使用 disp() 方法时,我得到了一个无限循环 运行。我找不到逻辑中的错误。我无法理解 while(temp!=NULL)
行和递增温度如何永无止境。
#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;
}