己写的Queue类循环的,push()函数有点问题
#include <iostream>
using namespace std;
template <class T>
struct Node
{
T data;
Node <T> *next;
};
template <class T>
class Queue
{
public:
Queue(){rear = NULL;};
Queue(Queue &x);
~Queue();
bool empty(){return rear == NULL;};
T Front();
T Top();
void push(const T x);
void pop();
void operator = (Queue &x);
private:
Node <T> *rear;
};
template <class T>
Queue <T> ::Queue(Queue &x)
{
while(!x.empty())
{
push(x.Front());
x.pop();
}
}
template <class T>
Queue <T> ::~Queue()
{
while(!empty())
{
pop();
}
}
template <class T>
void Queue <T> ::operator =(Queue &x)
{
while(!x.empty())
{
push(x.Front());
x.pop();
}
}
template <class T>
void Queue <T> ::push(const T x)
{
Node <T> *p = new Node <T> ;
p-> data = x;
p-> next = NULL;
if(!empty())
{
p-> next = rear-> next;
rear-> next = p;
rear = p;
}
else
{
rear = p;
rear-> next = rear;
}
}
template <class T>
void Queue <T> ::pop()
{
if(!empty())
{
Node <T> *p;
p = rear-> next;
rear-> next = p-> next;
delete p;
}
}
template <class T>
T Queue <T> ::Front()
{
if(!empty())
{
return rear-> next-> data;
}
}
template <class T>
T Queue <T> ::Top()
{
if(!empty())
{
return rear-> data;
}
}
int main()
{
Queue <int> a;
//a.push(2);
//a.push(5);
//cout < <a.Front();
//cout < <a.Top();
return 0;
}
掉用push后,运行会出问题
谁帮我看看
[解决办法]
看了一下push出的,改一下pop函就行了,其他你自己在
template <class T>
void Queue <T> ::pop()
{
if(!empty())
{
Node <T> *p;
p = rear-> next;
rear-> next = p-> next;
rear=rear==p?NULL:rear;//增加了一句
delete p;
}
}
[解决办法]
template <class T>
void Queue <T> ::pop()
{
if(!empty())
{
Node <T> *p;
p = rear-> next;
if(p == rear) //剩下一个结点时
{
delete p;
p = NULL;
rear = NULL;
}
else
{
rear-> next = p-> next;
p-> next = NULL;
delete p;
p = NULL;
}
}
}