-1
我在3個文件「Source.cpp,Queue.h,Queue.cpp」中編寫了代碼。在我的代碼中找不到鏈接列表隊列中的錯誤
每次運行程序時,都會顯示錯誤,我不知道原因。包括所有需要的庫。
//Source.Cpp 「主要功能」
Queue<int>X;
//trying to run the program .
for (int i = 0; i < 5; i++)
{
X.Push(i + 1);
cout << X.Size() << endl;
}
X.front();/
X.Pop();
X.front();
X.Pop();
return 0;
//Queue.h
//節點類.header在它所有的功能文件。
template<class Mine>
class Node
{
public:
Mine Value;
Node<Mine> *Prev;
Node();
Node(Mine);
};
template<class Mine>
//Queue Class
class Queue
{
int Elements;
Node<Mine> *Front, *Back;
public:
Queue();
~Queue();
int Size();//returns Queue Size
void Push(Mine);//Push a new value to the back
void Pop();//removes a value from the front
void Clear();// delete all the elements
bool isEmpty();// checks if there are no elements in the queue
Mine front();//returns the value in the front
};
//Queue.cpp
//實施.the代碼,我寫的。
template<class Mine>
Node<Mine>::Node()
{
Value = 0;
Prev = 0;
}
template<class Mine>
Node<Mine>::Node(Mine Value)
{
this->Value = Value;
Prev = 0;
}
template<class Mine>
Queue<Mine>::Queue()
{
Elements = 0;
Front = Back = 0;
}
template<class Mine>
Queue<Mine>::~Queue()
{
Clear();
}
template<class Mine>
int Queue<Mine>::Size()
{
return Elements;
}
template<class Mine>
void Queue<Mine>::Push(Mine Value)
{
Node<Mine> *NEW = new Node<Mine>(Value);
if (Front==0)
{
Front = Back = NEW;
Back->Prev = 0;
}
else
{
Back->Prev=NEW;
Back = NEW;
Back->Prev = 0;
}
Elements++;
}
template<class Mine>
void Queue<Mine>::Pop()
{
Node<T>*tmp;
assert(!isEmpty());
tmp = Front->Prev;
delete Front;
Front = tmp;
delete tmp;
if (Elements==1)Front=Back;
Elements--;
}
template<class Mine>
void Queue<Mine>::Clear()
{
for (int i = 0; i < Elements; i++)
{
Pop();
}
}
template<class Mine>
bool Queue<Mine>::isEmpty()
{
return Elements == 0;
}
template<class Mine>
Mine Queue<Mine>::front()
{
assert(!isEmpty());
return Front->Value;
}
每次我嘗試運行它停止工作的程序。
爲什麼不使用C++的隊列stl,爲什麼你要重新發明wheel dude? –
@Ahmed Samy至少函數void Queue :: Pop()是錯誤的。例如,這個Front = tmp; 刪除tmp; 沒有意義。 –
您能否將錯誤消息添加到您的問題? –