c++stack和list 介绍

stack介绍

堆栈是一种容器适配器,专门设计用于在 LIFO 上下文(后进先出)中运行,其中元素仅从容器的一端插入和提取。

堆栈作为容器适配器实现,容器适配器 是使用特定容器类的封装对象作为其基础容器 的类 ,提供一组特定的成员函数来访问其元素。元素从特定容器的 "back" 推送弹出 ,这称为堆栈的顶部

stack接口

stack() 构造空的栈

empty() 检测stack是否为空

size() 返回stack中元素的个数

top() 返回栈顶元素的引用

push() 将元素val压入stack中

pop() 将stack中尾部的元素弹出

stack的模拟实现

在c++中,模拟实现stack较C语言简单许多,因为库里提供了vector和list的接口,实现起来少了很多复杂的步骤

在模拟实现的过程中可以使用模板类,能够应对不同类型的数据

cpp 复制代码
template<class T,class Con=deque<T>>

这里我们在创建模板的时候使用两个类型,T代表了数据的类型,Con为实现的方式,默认传参为deque。

cpp 复制代码
Con _c;

这是类中的变量,_c的类型有几种可能:vector,list,deque。

插入

cpp 复制代码
void push(const T& x)
{
	_c.push_back(x);
}

这里我使用头部为栈底,实现的时候只需要调用库里的尾插函数即可。

删除

cpp 复制代码
void pop()
{
	_c.pop_back();
}

这里我们直接使用尾删函数即可。

取栈顶数据

cpp 复制代码
T& top()
{
	return _c[_c.size() - 1];
}

直接返回size前一个位置的数据即是栈顶数据。

数据个数

cpp 复制代码
size_t size()const
{
	return _c.size();
}

直接调用_c的size接口即可完成。

判空

cpp 复制代码
bool empty() const
{
	return _con.empty();
}

调用_c的判空接口。

queue介绍

  1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元 素,另一端提取元素。

  2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供 一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

queue接口

queue() 构造空的队列

empty() 检测队列是否为空,是返回true,否则返回false

size() 返回队列中有效元素的个数

front() 返回队头元素的引用

back() 返回队尾元素的引用

push() 在队尾将元素val入队列

pop() 将队头元素出队列

queue模拟实现

因为queue的接口中存在头删和尾插,因此使用vector来封装效率太低,故可以借助list来模拟实现queue。

实现过程也与stack差不多,借用库函数可以省去很多时间。

cpp 复制代码
template<class T,class con=deque<T>>

这里的con默认使用deque,同样也可以使用list。

判空

cpp 复制代码
bool empty()
{
	return _c.size() == 0;
}

数据个数

cpp 复制代码
size_t size()
{
	return _c.size();
}

队头数据

cpp 复制代码
const T& front() const
{
	return _c[_c.size() - 1];
}

队尾数据

cpp 复制代码
const T& back()const
{
	return _c[0];
}

插入

cpp 复制代码
void push(const T& x)
{
	_c.push_front(x);
}

删除

cpp 复制代码
void pop()
{
	_c.pop_back();
}
相关推荐
froginwe113 分钟前
Pandas DataFrame:深入理解数据分析的利器
开发语言
Miraitowa_cheems4 分钟前
LeetCode算法日记 - Day 81: 最大子数组和
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
Jm_洋洋7 分钟前
【Linux系统编程】程序替换:execve(execl、execlp、execle、execv、execvp、execvpe)
linux·运维·c语言·开发语言·程序人生
徐子童17 分钟前
数据结构---优先级队列(堆)
java·数据结构·面试题·优先级队列··topk问题
学编程就要猛25 分钟前
数据结构初阶:Java泛型
数据结构·1024程序员节
冯诺依曼的锦鲤29 分钟前
算法练习:前缀和专题
开发语言·c++·算法
闭着眼睛学算法41 分钟前
【双机位A卷】华为OD笔试之【哈希表】双机位A-跳房子I【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·c++·python·算法·华为od·散列表
JinSoooo1 小时前
pnpm monorepo 联调:告别 --global 参数
开发语言·javascript·ecmascript·pnpm
信仰_2739932431 小时前
枚举类Enum反编译后效果
java·开发语言
开发者驿站1 小时前
2025年保姆级C++环境配置教程(Windows/macOS双平台)
c++·windows·macos