type
status
date
slug
summary
tags
category
icon
password

存储结构

顺序存储结构

定义

  • 连续地址存储单元存放栈底到栈顶的数据元素,同时还有一个指针top指向每次操作的当前栈顶元素
  • 若存储栈的长度为Size,则栈顶位置top必须小于Size
    • top指针最大可以到Size-1
    • 当栈存在一个元素时:top=0
    • 空栈的判断条件定位:top=-1

顺序栈的基本算法

  1. 初始化
  1. 判栈空
  1. 进栈
  1. 出栈
  1. 读栈顶元素

链式存储结构

定义

notion image
  • 与链表的操作极其类似这里就不再赘述!!!(请参考链表章节,之后会更)

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)

例子

📎 参考文章

  • 引用文章
  1. 数据结构:栈和队列(Stack & Queue)【详解】
  1. C++ STL 之堆栈(后进先出) stack 详解
  1. 栈的链式存储结构-链栈的基本操作
  1. Stack Data Structure
  1. 【C++】栈(stack)的使用及push与emplace异同点
 
栈-理论知识RASA-Slots
  • Cusdis
  • Utterance
Chailyn
Chailyn
I will always be loyal to myself running towards ideal and freedom.
Announcement
🎉欢迎来到我的homepage🎉
-- 感谢您的支持 ---
吾生也有涯,而知也无涯
旅行记录,与你分享路过的风景
知识无价,学术blog上希望能帮到你
-- 祝您所遇皆温柔,所感皆太阳 --
更新(2024.12.12):
更新文章 “摆烂日记:静默中的能量积蓄
 
 
 
2024 Chailyn.

ChailynCui BLOG | I will always be loyal to myself running towards ideal and freedom.

Powered by NotionNext 4.3.1.