首页 > 其他分享 >stack和queue(2): 模拟实现

stack和queue(2): 模拟实现

时间:2024-05-31 23:32:20浏览次数:25  
标签:容器 const back queue return stack 模拟 size

一、stack的模拟实现

stack是一个容器适配器,它的底层是通过对某种容器类进行封装来实现,标准容器list和vector,deque都符合这些需求,默认情况下,如果没有为stack指定底层容器就默认是使用deque实现。

我们在模拟实现的时候也通过借助容器的方式来实现。

1.1 stack构造以及容量

1.1.1 stack构造

//栈的构造
stack() {}

对于构造函数直接采用默认的无参构造就行。

1.1.2 stack的容量

//返回栈内的元素个数,直接返回容器的size即可
size_t size()const
{
	return c.size();
}
//判断栈是否为空,直接判断容器是否为空即可
bool empty()const
{
	return c.empty();
}

size接口函数直接返回底层容器的size函数的返回值即可,empty判空函数也直接返回底层容器的判空接口即可。

1.2 stack的访问和修改操作

//push直接借助传入容器的push即可
void push(const T& x)
{
	c.push_back(x);
}
//pop借助容器的pop将栈顶元素即数组中的最后一个元素pop掉
void pop()
{
	c.pop_back();
}
//返回栈顶元素即数组的最后一个元素
T& top()
{
	return c.back();
}

const T& top()const
{
	return c.back();
}

push接口我们直接调用容器的push_back接口将x尾插到容器里面即可,对于pop接口,由于stack是服从先进后出的原则的,因此调用底层容器的尾删函数即可。对于top接口直接返回容器尾部的元素即可。

1.3 stack模拟实现的完整代码

template<class T, class Con = deque<T>>
//栈
class stack
{

public:
	//栈的构造
	stack() {}
	//push直接借助传入容器的push即可
	void push(const T& x)
	{
		c.push_back(x);
	}
	//pop借助容器的pop将栈顶元素即数组中的最后一个元素pop掉
	void pop()
	{
		c.pop_back();
	}
	//返回栈顶元素即数组的最后一个元素
	T& top()
	{
		return c.back();
	}

	const T& top()const
	{
		return c.back();
	}
	//返回栈内的元素个数,直接返回容器的size即可
	size_t size()const
	{
		return c.size();
	}
	//判断栈是否为空,直接判断容器是否为空即可
	bool empty()const
	{
		return c.empty();
	}

private:

	Con c;

};

以上是我们模拟实现的stack的完整代码。

二、queue的模拟实现

2.1 queue的构造以及容量

2.1.1 queue的构造

//队列的构造
queue() {}

与stack的构造的实现相同,直接使用默认的无参构造即可。

2.1.2 queue的容量

//返回队列中的有效数据,即返回容器的size
size_t size()const
{
	return c.size();
}
//判断队列是否为空,即判断容器是否为空即可
bool empty()const
{
	return c.empty();
}

这里的实现也与stack那边的实现基本相同,对于size直接返回底层容器的size接口即可,对于empty判空操作也是直接返回底层容器的判空接口即可。

2.2 queue的访问和修改操作

//进队列,先进先出,队尾进队头出,选择头插
void push(const T& x)
{
	c.insert(c.begin(), x);
}
//出队列尾删即可
void pop()
{
	c.pop_back();
}
//返回队尾元素,即返回容器的头
T& back()
{
	return c.front();
}

const T& back()const
{
	return c.front();
}
//返回队头元素,即返回容器的尾
T& front()
{
	return c.back();
}

const T& front()const
{
	return c.back();
}

对于queue的push由于queue是服从先进先出的原则的,因此我们选择通过头插来实现它的push接口,pop接口就直接调用底层容器的pop_back即可,back接口是用来返回队尾元素的,我们直接返回底层容器的front即可,因为底层容器的实现中是将头作为队列尾的,对于front接口就是与back接口相反了的,直接返回底层容器的back即可。

2.3 queue模拟实现的完整代码

template<class T, class Con = deque<T>>
//队列
class queue
{
public:
	//队列的构造
	queue() {}
	//进队列,先进先出,队尾进队头出,选择头插
	void push(const T& x)
	{
		c.insert(c.begin(), x);
	}
	//出队列尾删即可
	void pop()
	{
		c.pop_back();
	}
	//返回队尾元素,即返回容器的头
	T& back()
	{
		return c.front();
	}

	const T& back()const
	{
		return c.front();
	}
	//返回队头元素,即返回容器的尾
	T& front()
	{
		return c.back();
	}

	const T& front()const
	{
		return c.back();
	}
	//返回队列中的有效数据,即返回容器的size
	size_t size()const
	{
		return c.size();
	}
	//判断队列是否为空,即判断容器是否为空即可
	bool empty()const
	{
		return c.empty();
	}

private:

	Con c;

};

以上就是我们进行模拟实现的queue类的完整代码了。


对于stack和queue的模拟实现到这里就结束了,对于它们的模拟实现我们是通过对其他容器进行封装作为它的底层容器的方式实现的,对于传统的模拟实现也是简单了很多,如果需要博客中的代码请点击下面仓库链接获取:

stack和queue的模拟实现的完整代码

标签:容器,const,back,queue,return,stack,模拟,size
From: https://blog.csdn.net/2302_79331124/article/details/139362880

相关文章

  • ACCESS 模拟雪花ID
    说明:以自动编号类型为主键的数据表,在有些场景使用起来会比较麻烦,比如,我们在使用INSERTINTO往数据表里面插入数据时,不能精准得获取刚刚插入的记录的ID值,也就无法对这条记录进行更多的操作,比如把这个ID值外链给其他数据表等.也有人会说用MAX不就可以取到这个ID值了吗?嗯......
  • RansomwareSim:一款功能强大的勒索软件模拟研究学习工具
    关于RansomwareSimRansomwareSim是一款功能强大的勒索软件模拟研究学习工具,该工具是为网络安全教育和培训目的开发的模拟勒索软件应用程序,它旨在为广大研究人员演示勒索软件如何加密系统上的文件并与命令和控制服务器通信,以更好地了解勒索软件的运行机制。功能介绍1、加......
  • JAVA【案例4-8】模拟物流快递系统程序设计
    【模拟物流快递系统程序设计】1、案例描述网购已成为人们生活的重要组成部门,当人们在购物网站中下订单后,订单中的货物就会在经过一系列的流程后,送到客户的手中。而在送货期间,物流管理人员可以在系统中查看所有物品的物流信息。编写一个模拟物流快递系统的程序,模拟后台系统处......
  • C++数据结构之:栈Stack
    摘要:  it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储......
  • NumPy 均匀分布模拟及 Seaborn 可视化教程
    均匀分布简介均匀分布是一种连续概率分布,表示在指定范围内的所有事件具有相等的发生概率。它常用于模拟随机事件,例如生成随机数或选择随机样本。参数均匀分布用两个参数来定义:a:下限,表示分布的最小值。b:上限,表示分布的最大值。公式均匀分布的概率密度函数(PDF)为:f(x)=......
  • NumPy 均匀分布模拟及 Seaborn 可视化教程
    均匀分布简介均匀分布是一种连续概率分布,表示在指定范围内的所有事件具有相等的发生概率。它常用于模拟随机事件,例如生成随机数或选择随机样本。参数均匀分布用两个参数来定义:a:下限,表示分布的最小值。b:上限,表示分布的最大值。公式均匀分布的概率密度函数(PDF)为:f......
  • PyTorch学习(8):PyTorch中Tensor的合并于拆分(torch.cat, torch.stack, torch.trunk, tor
    1.写在前面       在使用PyTorch执行深度学习开发时,经常会用到对Tensor的合并于拆分操作。如我们在使用CSP时,有时候会需要将Tensor拆分成两部分,其中一部分进行进行CrossStage操作,另一部分执行多重卷积操作,这个时候我们就会用到四个典型的接口,分别是torch.cat,torch......
  • selenium模拟登录网站
     importtimeimportrequestsfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBybrowser=webdriver.Edge()browser.maximize_window()url="https://m.xiaoshuopu.com/user/login.html"browser.get(url)username_input=b......
  • OpenStack学习笔记之四:Cinder流程介绍及GlusterFS存储对接
    4、Cinder详解及存储对接4.1Cinder流程介绍4.1.1流程结构Cinder服务由四个进程组成:①cinder-api是一个WSGI应用程序,它接受并验证来自客户端的REST(JSON或XML)请求,并通过AMQP将它们路由到适当的其他Cinder进程。②cinder-scheduler确定哪个后端应作为卷创建或移动请求......
  • 基于MCTS的三维四子棋AI模拟和基于PyQt5的应用交互界面
    '''三维四子棋是在三维空间率先四子连珠的游戏,在传统五子棋基本被研究透的情况下,三维四子棋增加了规则和难度,更加考验计算力、空间感、观察力和想象力。本模块实现三维四子棋的GUI。仅供学习和参考。BySoulCheungOnMay28thEmail:[email protected]:1594983583'''......