Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用链表实现队列_C++_Queue - Fatal编程技术网

C++ 使用链表实现队列

C++ 使用链表实现队列,c++,queue,C++,Queue,我编写了用链表实现队列的代码,但有一些我无法理解的错误。当我第一次将一个项目推送到队列中时,它可以查找,但当我尝试推送到第二个项目时,它会给我运行时错误。你能帮我吗?非常感谢你! 代码如下: #include<iostream> using namespace std; template<typename T> struct Node{ T data; Node* next; Node(T d, Node* n=NULL): data(d), ne

我编写了用链表实现队列的代码,但有一些我无法理解的错误。当我第一次将一个项目推送到队列中时,它可以查找,但当我尝试推送到第二个项目时,它会给我运行时错误。你能帮我吗?非常感谢你! 代码如下:

#include<iostream>
using namespace std;
template<typename T>
struct Node{
    T data;
    Node* next;
    Node(T d, Node* n=NULL): data(d), next(n){}
};


template<typename T>
class myqueue{
    private:
        Node<T> * first;
        Node<T> * last;
    public:
        myqueue(){}
        void push(T da){
            if(first==NULL) {
                first=new Node<T>(da);
                last=first;
            }
            else {

                last->next=new Node<T>(da);
                last=last->next;

                }
        }   
        void pop(){
          if(last!=NULL){
            Node<T> * temp=first;
            first=first->next;
            delete temp;
          }
        }
        void front(){
           if(first!=NULL) cout<< first->data;
        }
        bool isempty(){
            return last==NULL;
        }
};

int main(){
    myqueue<int> q;
    q.push(1);
    q.push(2);
    q.front();
    /*
    q.push(3);
    q.push(4);
    q.push(5);
    cout<<q.front();
    */

}


compile error: runtime error    
#包括
使用名称空间std;
模板
结构节点{
T数据;
节点*下一步;
节点(td,Node*n=NULL):数据(d),下一个(n){
};
模板
类myqueue{
私人:
节点*第一;
节点*最后;
公众:
myqueue(){}
无效推力(TDA){
if(first==NULL){
第一个=新节点(da);
最后=第一;
}
否则{
最后->下一步=新节点(da);
最后一个=最后一个->下一个;
}
}   
void pop(){
if(last!=NULL){
节点*温度=第一;
第一个=第一个->下一个;
删除临时文件;
}
}
空锋(){
如果(第一个!=NULL)coutdata;
}
布尔是空的{
返回last==NULL;
}
};
int main(){
myq;
q、 推(1);
q、 推(2);
q、 前面();
/*
q、 推(3);
q、 推(4);
q、 推(5);

cout您的
first
last
指针未初始化,因此您有未定义的行为。使用成员初始化列表初始化它们:

myqueue::myqueue() : first(NULL), last(NULL) {}

您的
第一个
最后一个
指针未初始化,因此您有未定义的行为。请使用成员初始化列表初始化它们:

myqueue::myqueue() : first(NULL), last(NULL) {}

是否应该始终初始化指针?@dianedan您永远不应该使用未初始化变量的值。这是初始化作为成员的指针的一种方法。或者,您可以在构造函数中将
NULL
分配给它们(
first=NULL;last=NULL;
)。明白了,非常感谢您的帮助!!@dianedan如果有帮助,请不要忘记接受答案。:)我还有一个关于指针的问题。在这种情况下,我认为first和last存储对象/类型的地址。为什么我可以使用first==NULL而不是*first==NULL进行比较?我应该始终初始化指针吗?@dianedan you sh永远不要使用未初始化变量的值。这是初始化作为成员的指针的一种方法。或者,您可以在构造函数中将
NULL
分配给它们(
first=NULL;last=NULL;
)。明白了,非常感谢您的帮助。@dianedan如果有帮助,请不要忘记接受答案。:)我还有一个关于指针的问题。在这种情况下,我认为first和last存储对象/类型的地址。为什么我可以使用first==NULL而不是*first==NULL进行比较?