type
status
date
slug
summary
tags
category
icon
password
存储结构
顺序存储结构
定义
- 连续地址存储单元存放栈底到栈顶的数据元素,同时还有一个指针
top
指向每次操作的当前栈顶元素
- 若存储栈的长度为
Size
,则栈顶位置top必须小于Size
。 top
指针最大可以到Size-1
- 当栈存在一个元素时:
top=0
- 把空栈的判断条件定位:
top=-1
顺序栈的基本算法
- 初始化
- 判栈空
- 进栈
- 出栈
- 读栈顶元素
链式存储结构
定义
- 与链表的操作极其类似这里就不再赘述!!!(请参考链表章节,之后会更)
STL中的stack
我们编程中很大概率是使用stl中的stack
stack<T>
容器适配器的数据是以LIFO
(Last in First Out, 后进先出) 的方式组织的
- 必须要包含头文件
#include <stack>
stack::empty()
empty()
函数用于检查栈容器是否为空
stack::size()
size()
函数用于返回栈容器中元素的数量
stack::push()
push()
函数用于在堆栈顶部插入元素
- 用法:
stackname.push(value)
stack::pop()
pop()
弹出栈顶元素,不返回任何值。
- 用法:
stackname.pop()
stack::top()
- 返回一个栈顶元素的引用,类型为
T&
。如果栈为空,返回值未定义。
- 用法:
stackname
.top()
stack::emplace()
emplace()
用于向栈容器中插入一个新元素,新元素被添加到栈顶,多了构造步骤
- 用法:
stackname.emplace(value)
stack::emplace()和stack::push()的区别:
- 对于int、double等内置数据类型而言,push()和emplace()是相同的
- 对于自定义数据类型而言,使用push()前必须先将要添加的对象构造出来(实例化),而使用emplace()既可以填入实例化的对象也可以填入对象的构造参数
总结:
- push的功能emplace都包含。push传入的对象需要事先构造好,再复制过去插入容器中;而emplace则可以自己使用构造函数所需的参数构造出对象,并直接插入容器中。
- emplace相比于push省去了复制的步骤,则使用emplace会更加节省内存。
stack::swap()
swap()
用于将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。
- 用法:
stackname1
.swap(
stackname2
)
例子
📎 参考文章
- 引用文章
- Author:Chailyn
- URL:https://own.chailyncui.blog/article/%E6%A0%88-2
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!