手撕STL(2)——队列的内部实现

在这里插入图片描述

前言

队列小伙伴们一定不陌生,本节课蒟蒻君来带大家学习队列的内部实现。

代码(链表存储)

#include <bits/stdc++.h>
using namespace std;
// 定义链表 
template<class T>
struct node {
    T num;
    node<T>* nxt;
};
template<class T>
class MyQueue {
    private:
        node<T>* _Front;
		node<T>* _rear;
	public:
		// 构造函数:队首队尾开辟空间 
 		MyQueue() {
 			_Front = _rear = new node<T>;
 			_Front -> nxt = NULL;
		}
 		// 析构函数:销毁队列 
 		~MyQueue();
 		// 元素入队 
 		void _push(T x);
 		// 队首出队 
 		void _pop();
 		// 队列长度
		size_t _size(); 
 		// 队列是否为空 
 		bool _empty();
 		// 队首元素 
 		T _front();
};
template<class T>
MyQueue<T> :: ~MyQueue() {
 	while (_Front != NULL) {
		_rear = _Front -> nxt;
	    delete _Front;
	   _Front = _rear;
	}
    delete _rear;
}
template<class T>
void MyQueue<T> :: _push(T x) {
	node<T>* p = new node<T>;
    p -> num = x;
    _rear -> nxt = p;
    _rear = p;
    _rear -> nxt = NULL;
}
template<class T>
void MyQueue<T> :: _pop() {
	// 如果队列已经空了就报错
	if (_empty()) {
		throw"_empty";
	} 
 	node<T>* p = _Front -> nxt;
 	_Front -> nxt = p -> nxt;
 	delete p;
}
template<class T>
size_t MyQueue<T> :: _size() {
	node<T>* p = _Front;
	size_t sizes = 0;
	while (p != _rear) {
		p = p -> nxt;
		++sizes; 
	}
	return sizes;
}
template<class T>
bool MyQueue<T> :: _empty() {
 	return _Front == _rear;
}
template<class T>
T MyQueue<T> :: _front() {
 	return _Front -> nxt -> num;
}
int main() {
	// 测试 
	MyQueue<int> q;
	q._push(1);
	cout << q._front() << '\n';
	q._push(2);
	cout << q._size() << '\n';
	q._pop();
	cout << q._empty() << '\n'; 
	return 0;
}

在这里插入图片描述

  • 31
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒟蒻一枚

谢谢鸭~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值