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

浏览:55日期:2023-05-08

问题描述

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

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

问题解答

回答1:

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啊

相关文章: