C++--deque(双端队列)模拟实现stack和queue

35 篇文章 0 订阅

1. deque的认识

  • deque(双端队列):是双开口的“连续”空间的数据结构,两端都可以进行插入和删除操作,时间复杂度为O(1);
  • deque并不是真正的连续空间,而是由一段段连续的小空间拼接而成,分段连续,类似于一个动态的二维数组;
  • 与vector相比:头插和删除时,不需要搬移元素,效率特别高,扩容时也不需要搬移大量元素;
  • 与list相比:空间利用率比较高,不需要存储额外字段;
  • 缺陷:不适合遍历。
dequevectorlist
优点支持随机访问(性能略低于vector),头部尾部操作性能高:O(1),增容代价小随机访问,尾部操作,空间利用率高,不容易造成内存碎片任意位置操作性能高:O(1)
缺点中间位置操作性能比较低:O(n)中间头部操作:O(n),增容代价比较大不支持随机访问,空间利用率较低,容易造成内存碎片

迭代器失效问题

  1. vector:底层为连续空间,删除数据,迭代器不失效
  2. list:底层为不连续空间,删除数据,指向节点的迭代器会失效
  3. deque:底层为假性连续空间,删除数据,可能会导致迭代器会失效,取决于删除数据的位置

2. stack的实现(deque)

  • 栈的构造尾插、尾删、取栈顶元素、返回元素个数、判空操作
template<class T, class Con = deque<T>>
class Stack
{
public:
	Stack() {}
	void push(const T& x)
	{
		_c.push_back(x);
	}
	void pop()
	{
		_c.pop_back();
	}
	T& top()
	{
		return _c.back();
	}
	const T& top()const
	{
		return _c.back();
	}
	size_t size()const
	{
		return _c.size();
	}
	bool empty()const
	{
		return _c.empty();
	}
private:
	Con _c;
};

在这里插入图片描述

3. queue的实现(deque)

  • 队列的构造、尾插、头删、取队头队尾元素、返回元素个数、判空操作
template<class T, class Con = deque<T>>
class Queue
{
public:
	Queue() {}
	void push(const T& x)
	{
		_c.push_back(x);
	}
	void pop()
	{
		_c.pop_front();
	}
	T& back()
	{
		return _c.back();
	}
	const T& back()const
	{
		return _c.back();
	}
	T& front()
	{
		return _c.front();
	}
	const T& front()const 
	{
		return _c.front();
	}
	size_t size()const
	{
		return _c.size();
	}
	bool empty()const
	{
		return _c.empty();
	}
private:
	Con _c;
};

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值