学习数据结构C++版遇到的问题,Segmentation fault:11?
本文介绍了学习数据结构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;
}
解决方案
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啊
这篇关于学习数据结构C++版遇到的问题,Segmentation fault:11?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文