数据结构--链队列C++(模板类实现)
作者:
AmbitionX
,
2022-05-03 19:35:48
,
所有人可见
,
阅读 278
#include <iostream>
using namespace std;
template <typename DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template <typename DataType>
class LinkQueue
{
public:
LinkQueue( );
~LinkQueue( );
void EnQueue(DataType x);
DataType DeQueue( );
DataType GetHead( );
void Empty( );
private:
Node<DataType> *front, *rear;
};
template <typename DataType>
LinkQueue<DataType>::LinkQueue( )
{
Node <DataType> *s;
s = new Node<DataType>;
s->next = NULL;
front = rear = s;
}
template <typename DataType>
LinkQueue<DataType>::~LinkQueue( )
{
Node <DataType> *p;
while(front != NULL)
{
p = front->next;
delete front;
front = p;
}
}
template <typename DataType>
void LinkQueue<DataType>:: EnQueue(DataType x)
{
Node<DataType> * s = nullptr;
s = new Node<DataType>;
s->data = x;
s->next = nullptr;
rear->next = s;
rear = s;
}
template <typename DataType>
DataType LinkQueue<DataType>:: DeQueue()
{
DataType x;
Node<DataType> * p = nullptr;
if (rear == front) throw "下溢";
p = front->next;
x = p->data;
front->next = p->next;
if (p->next == nullptr) rear = front;
delete p;
return x;
}
template <typename DataType>
DataType LinkQueue<DataType>:: GetHead()
{
return front->next->data;
}
template <typename DataType>
void LinkQueue<DataType>:: Empty()
{
if (front == rear) cout << "为空" << endl;
else cout << "不空" << endl;
}
int main()
{
LinkQueue<int> Q;
Q.Empty();
cout<<"元素10和15执行入队操作:"<<endl;
try
{
Q.EnQueue(10);
Q.EnQueue(15);
}
catch (char* wrong)
{
cout<<wrong<<endl;;
}
cout<<"查看队头元素:"<<endl;
cout<<Q.GetHead( )<<endl;
cout<<"执行出队操作:"<<endl;
try
{
Q.DeQueue( );
}
catch (char* wrong)
{
cout<<wrong<<endl;
}
cout<<"查看队头元素:"<<endl;
cout<<Q.GetHead( )<<endl;
return 0;
}