c++栈笔记

一种常见的数据结构,遵循后进先出,先进后出的原则。地址不连续,栈顶(top)

1.常见函数

|-----------------|---------------------|
| stack<int> s; | 定义一个参数类型为int 的栈 名为s |
| s.push() | 向栈中插入元素 |
| s.emplace() | 压栈,无返回值 |
| s.pop() | 删除栈顶元素 |
| s.top() | 返回栈顶元素,该元素不出栈 |
| s.empty() | 判断栈是否为空,是返回 true |
| s.size() | 返回栈中元素数量 |

push( ) 与 emplace( ) 的区别:

首先 s.push() 与 s.emplace() 的++最终执行效果是一样++的,都是在栈顶加入一个元素,差别就是压栈元素的来源可能不同。

对于包含简单的基本类型的栈来说两者之间几乎没有差别,但当栈的类型是一些大型、复杂的类,具有复杂的构造函数或复制构造函数时,区别就出现了:

push() 接受一个已经存在的元素,并将它的副本附加到容器中。push总是只接受一个参数,即要复制到栈顶中的元素。

emplace() 可以现场通过参数列表创建该类的一个实例放到栈顶。要放置的参数将作为参数转发给栈中所含的类的构造函数。如果类有默认构造函数,emplace 可以有一个参数、多个参数,或者根本没有参数。

例如,当栈的参数是类时,push的参数必须是已实例化的类名作为参数,而 emplace 则可以直接使用类初始化参数现场初始化一个类实例加入栈顶。因此 emplace 的功能比 push 更强大,且兼容 push,但一般使用过程中,使用 push 就足够了。

2.基本操作

(1)判断是否为空

cpp 复制代码
bool iE(SqStack S){
	if (S.top==-1)	{
		return true;
	}
	return false;
}

(2)判断栈是否满

cpp 复制代码
bool iF(SqStack S){
	if (S.top == MAXSIZE - 1)	{
		return true;
	}
	return false;
}

(3)入栈

cpp 复制代码
bool Push(SqStack& S, ElemType e){
	bool flag = iF(S);
	if (flag==true)	{
		printf("栈满\n");
		return false;
	}
	S.top++;
	S.data[S.top] = e;
	return true;
 }

(4)出栈

cpp 复制代码
bool Pop(SqStack& S, ElemType& e){
	bool flag = iE(S);
	if (flag)	{
		printf("栈空\n");
		return false;
	}
	e = S.data[S.top];
	S.top--;
	return true;
}

(5)

cpp 复制代码
bool GT(SqStack& S, ElemType& e){
	bool flag = iE(S);
	if (flag){
		return false;
	}
	e = S.data[S.top];
	return true;
}

优先队列priority_queue

普通队列+优先级排序=优先队列

优先队列按照给定得比较规则默认从大到小进行排序,与普通队列区别于队首元素为top非front

cpp 复制代码
//优先队列展开内容
priority_queue<int,vector<int>,less<int>>q;//大根堆
priority_queue<int,vector<int>,greater<int>>q;//小根堆
相关推荐
断眉的派大星4 分钟前
# Python 魔术方法(魔法方法)超详细讲解
开发语言·python
2501_933329557 分钟前
技术深度拆解:Infoseek舆情处置系统的全链路架构与核心实现
开发语言·人工智能·自然语言处理·架构
妮妮喔妮10 分钟前
supabase的webhook报错
开发语言·前端·javascript
我的xiaodoujiao11 分钟前
API 接口自动化测试详细图文教程学习系列11--Requests模块3--测试练习
开发语言·python·学习·测试工具·pytest
cccccc语言我来了17 分钟前
C++轻量级消息队列服务器
java·服务器·c++
九成宫28 分钟前
IT项目管理期末复习——Chapter 8 项目质量管理
笔记·项目管理·软件工程
Flittly29 分钟前
【SpringSecurity新手村系列】(3)自定义登录页与表单认证
java·笔记·安全·spring·springboot
闻缺陷则喜何志丹31 分钟前
【背包 组合】P7552 [COCI 2020/2021 #6] Anagramistica|普及+
c++·算法·背包·洛谷·组合
xiaoye-duck33 分钟前
【C++:C++11】C++11新特性深度解析:从类新功能、Lambda表达式到包装器实战
开发语言·c++·c++11
qq_120840937133 分钟前
Three.js 大场景分块加载实战:从全量渲染到可视集调度
开发语言·javascript·数码相机