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

发布于 2022-09-02 14:21:17 字数 2297 浏览 10 评论 0

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

#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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

她比我温柔 2022-09-09 14:21:17
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啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文