C++:模拟实现链式队列结构
1. 队列
- 队列是一种先进先出的数据结构,数据进入的一段称为队首,数据送出的一段称为队尾
- 队列也分顺序队列和链式队列。链式队列是基于单链表实现的,数据在链表的末端添加,在链表的头部移除。顺序队列则是通过数组来实现的。
2. 队列的接口
- 入队操作:Push(const T& data)
- 出队操作:Pop()
- 队列判空:Empty()
- 队首元素:FrontQueue()
3. 队列实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vld.h>
#include<assert.h>
using namespace std;
template<class T>
struct QueueNode//链式队列中一个节点的结构体
{
T _data;//节点值
QueueNode<T> *_next;//指向下一个节点
QueueNode(const T& data)
:_data(data)
,_next(NULL)
{}
};
template <class T>
class Queue
{
typedef QueueNode<T> Node;
public:
Queue()
:_front(NULL)
,_rear(NULL)
{}
~Queue()
{
Node* cur = _front;
while (cur)
{
Node* del = cur;
cur = cur->_next;
delete cur;
}
}
void Push(const T& data)//入队
{
if (_front!= NULL)
{
_rear->_next = new Node(data);
_rear = _rear->_next;
}
else
{
_front = new Node(data);
_rear = _front;
}
}
void Pop()//出队
{
if (_front ==NULL)
{
cout << "Queue is empty!!!" << endl;
}
else
{
Node* del = _front;
_front = _front->_next;
delete del;
del = NULL;
}
}
bool Empty()
{
if (_front == NULL)
return true;
return false;
}
T& FrontQueue()
{
assert(_front != NULL);
return _front->_data;
}
private:
Node* _front;
Node* _rear;
};
void main()
{
Queue<int> st;
for (int i = 1; i <= 5; ++i) {
st.Push(i);
cout << i << "入队." << endl;
}
cout << "队首元素"<< st.FrontQueue() << endl;
cout << "栈不为空返回:"<<st.Empty() << endl;
while (!st.Empty())
{
int val = st.FrontQueue();
st.Pop();
cout << val << " 出队." << endl;
}
cout << "队为空返回:" << st.Empty() << endl;
system("pause");
}