C++:模拟实现链式队列结构

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");
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值