찾다

 >  Q&A  >  본문

学习数据结构C++版遇到的问题,Segmentation fault:11?

这是代码
在输入数据的时候 会崩溃

#include <iostream>
using namespace std;

template <class DataType>
struct Node
{
    DataType data;
    Node<DataType> *next;
};

template <class DataType>
class LinkQueue
{
public:
    LinkQueue();
    ~LinkQueue();
    void EnQueue(DataType x);
    DataType DeQueue();
    DataType GetQueue();
    int Empty(){return front==rear?1:0;}
private:
    Node<DataType> *front,*rear;
};

template <class DataType>
LinkQueue<DataType>::LinkQueue()
{
    Node<DataType> *s;
    s=new Node<DataType>;
    s->next=NULL;
    front=rear=s;
}

template <class DataType>
LinkQueue<DataType>::~LinkQueue()
{
    while (front!=NULL)
    {
        Node<DataType> *q;
        q=front;
        front=front->next;
        delete q;
    }
}

template <class DataType>
void LinkQueue<DataType>::EnQueue(DataType x)
{
    Node<DataType> *s=NULL;
    s->data=x;
    s->next=NULL;
    rear->next=s;
    rear=s;
    // cout<<"对"<<x<<"执行入队操作"<<endl;
}

template <class DataType>
DataType LinkQueue<DataType>::DeQueue()
{
    if (rear==front)
    {
        throw "下溢";
    }
    Node<DataType> *p;
    p=front->next;
    DataType x=p->data;
    front->next=p->next;
    if (p->next==NULL)
    {
        rear=front;
    }
    delete p;
    cout<<"执行出队操作"<<endl;
    return x;
}

template <class DataType>
DataType LinkQueue<DataType>::GetQueue()
{
    cout<<"查看队头元素:"<<front->next->data;
    return front->next->data;
}

int main() {

    LinkQueue<int> linkQ;
    int a=0;
    cin>>a;
    while(a)
    {
        if (linkQ.Empty())
        {
            cout<<"队空,";
            linkQ.EnQueue(a);
            linkQ.GetQueue();
        } else {
            linkQ.EnQueue(a);
            linkQ.GetQueue();
            linkQ.DeQueue();
            linkQ.GetQueue();
        }
        cin>>a;
    }
    return 0;
}

基本上是照着书敲的,改了一些地方,都是类似书上原来的入队是这样的:

template <class DataType>
void LinkQueue<DataType>::EnQueue(DataType x)
{
    s->data=x;
    s->next=NULL;
    rear->next=s;
    rear=s;
}
PHPzPHPz2774일 전417

모든 응답(1)나는 대답할 것이다

  • PHPz

    PHPz2017-04-17 13:42:52

    void LinkQueue<DataType>::EnQueue(DataType x)
    {
        Node<DataType> *s=NULL;
        s->data=x;
        s->next=NULL;
        rear->next=s;
        rear=s;
        // cout<<"对"<<x<<"执行入队操作"<<endl;
    }

    同学,你给s赋了NULL,怎么又取s的内容啊,s指向的是NULL啊

    회신하다
    0
  • 취소회신하다