数据结构C++——栈

news2024/11/25 23:29:02

文章目录

  • 一、定义
  • 二、ADT
  • 三、栈的描述方法
    • 3.1 数组描述
      • 3.1.1 派生arrayList
      • 3.1.2 定制数组arrayStack
    • 3.2 链表描述
      • 3.2.1 派生chain
      • 3.2.2 定制数组LinkedStack
  • 四、应用
    • 4.1 括号匹配
    • 4.2 汉诺塔
    • 4.3 列车车厢重排
    • 4.4 迷宫老鼠

一、定义

DEF.
栈(stack)是一个线性表,其插入(也称为添加)和删除操作都在表的同一端进行。

  • 其中允许插入和删除的一端被称为栈顶(top)
  • 另一端被称为栈底(bottom)
  • 栈是一个后进先出( LIFO (Last-In, First-Out) )表
    在这里插入图片描述

二、ADT

ADT包含实例和操作。

  • 实例
    元素线性表,一端为栈底,另一端为栈顶
  • 操作
    empty();//栈为空返回true,否则返回false
    size();//返回栈中元素个数
    top();//返回栈顶元素
    pop();//删除栈顶元素
    push(x);//将元素x压入栈
template<class T>
class stack{
   
	public:
		virtual ~stack(){
   }
		// 栈为空返回true,否则false
		virtual bool empty() const=0;
		// 返回栈中元素个数
		virtual int size() const=0;
		// 返回栈顶元素
		virtual T& top() =0;
		// 删除栈顶元素
		virtual void pop() = 0;
		// 将元素theEle入栈
		virtual void push(const T& theEle) =0;
}

三、栈的描述方法

栈是一种线性表,因此栈可以使用任何一种线性表的描述方法

  • 数组描述
  • 链表描述

3.1 数组描述

栈使用数组描述,有两种实现方法:

  1. 使用数组描述的线性表arrayList, 通过arrayList类的派生得到数组描述的栈类derivedArrayStack
  2. 定制数组描述的栈类arrayStack类

3.1.1 派生arrayList

思路:

  • 确定栈顶元素的索引:arrayList< T >::size()-1
  • 应用arrayList类中的方法来实现
template<class T>
class derivedArrayStack::private arrayList<T>,public stack<T>
{
   
	public:
	derivedArrayStack(int initialCapacity=10):arrayList<T>(initialCapacity){
   }
	bool empty() const{
   return arrayList<T>::empty();}
	int size() const{
   return arrayList<T>::size();}
	T& top(){
   
		if(arrayList<T>::empty()) throw StackEmpty();
		return get(arrayList<T>::size()-1;)
	}
	void pop(){
   
		if(arrayList<T>::empty()) throw StackEmpty();
		erase(arrayList<T>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Window环境下MySQL管理

1、MySQL服务启用和停止 图形化界面管理 使用键盘组合键&#xff08;Win R&#xff09;打开运行对话框&#xff0c;在对话框中输入services.msc并点击确定。 这里可以看到服务名称为MySQL84并处于正在运行的状态。 选中后右键可以进行暂停、停止、重启等操作。 命令提示符管理…

python--16 GUI编程1

GUI编程简介 主流3大GUI框架 框架名称说明Tkinter一个轻量级的跨平台图形用户界面&#xff08;GUI&#xff09;开发工具&#xff0c;是Tk图形用户界面工具包标准的Python接口Kivy基于OpenGL ES 2&#xff0c;能够让使用相同源代码创建的程序能跨平台运行。这个框架是事件驱动…

LLaMA 背景

什么是LLaMA&#xff1f; 模型介绍&#xff1a;LLaMA是Meta开发的语言模型&#xff0c;旨在推动开放科学和人工智能的实践。 参数范围&#xff1a;这些模型的参数数量从7B到65B不等&#xff0c;覆盖了不同规模的需求。 训练数据&#xff1a;LLaMA模型是在数万亿个公开数据集的…

2024视频改字祝福 豪车装X系统源码uniapp前端源码

源码介绍 uniapp视频改字祝福 豪车装X系统源码 全开源,只有uniapp前端&#xff0c;API接口需要寻找对应的。 创意无限&#xff01;AI视频改字祝福&#xff0c;豪车装X系统源码开源&#xff0c;打造个性化祝福视频不再难&#xff01; 想要为你的朋友或家人送上一份特别的祝福…

Spring Boot 日志 (初级)

什么是日志呢&#xff1f;其实就是一条条的打印语句&#xff0c;我们就可以根据打印出来的日志&#xff0c;去分析程序存在的问题等。虽然作为后端开发人员&#xff0c;日志并不是那么重要&#xff0c;但是在学习的过程中&#xff0c;也是比较重要的&#xff0c;可以使用在我们…

OpenCV分水岭算法watershed函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 我们将学会使用基于标记的分水岭算法来进行图像分割。我们将看到&#xff1a;watershed()函数的用法。 任何灰度图像都可以被视为一个地形表…

vue项目实战速查记录

1.图片下载到本地 2.本地静态文件访问 3.元素大小相同,相互覆盖 1.图片下载到本地 实现原理:创建a标签,利用a标签下载属性. download(){const link document.createElement(a);link.href "图片地址";link.setAttribute(download, name);document.body.ap…

Docker核心技术:Docker原理之Namespace

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Docker核心技术 系列文章&#xff1a;Docker原理之Namespace&#xff0c;其他文章快捷链接如下&#xff1a; 应用架构演进容器技术要解决哪些问题Docker的基本使用Docker是如何实现的 Docker核心技术&#xff1…

【Qt】 FFmpeg+Qt windows 32位或者64位环境搭建

简介 目前Ffmpeg官网&#xff08;64位连接&#xff09;下载的均为64位编译的&#xff0c;这要求我们采用的Qt creator也采用64位编译器。但是仍存在部分用户采用32位编译器&#xff0c;所以这部分用户需下载32 Ffmpeg&#xff08;32位连接&#xff09;。 根据使用的编译器位数…

ArkTS语言---基础知识

ArkTS是一种为构建高性能应用而设计的编程语言。ArkTS在继承TypeScript语法的基础上进行了优化&#xff0c;以提供更高的性能和开发效率。目前流行的编程语言TypeScript是在JavaScript基础上通过添加类型定义扩展而来的&#xff0c;而ArkTS则是TypeScript的进一步扩展。TypeScr…

【面经】C++八股文(地平线C++一面)

一、C11的新特性都有哪些&#xff1f; 1.1 自动类型推断 (auto) auto 关键字允许编译器自动推断变量的类型&#xff0c;从而简化代码的书写。 auto num 5; // int auto pi 3.14; // double auto str "Hello"; // const char*1.2 范围 for 循环 范围…

tomcat部署java项目 出现404访问不到

今天使用tomcat做项目部署,部署SSM项目把项目上传到tomcat下面的webapps后一直访问不到项目 一直报404访问不到资源&#xff0c;但是访问tomcat又可以&#xff0c;浏览器能出现tomcat的标致&#xff0c;查看logs里面的运行日志发现报错&#xff1a;org.apache.catalina.core.St…

PYTHON学习笔记(四、pyhton数据结构--列表)

&#xff08;1&#xff09;list列表 列表的含义是指&#xff1a;&#xff08;1&#xff09;一系列的按特定顺序排列的元素组成。&#xff08;2&#xff09;python中内置的可变序列。&#xff08;3&#xff09;在python中使用[]定义列表&#xff0c;元素与元素之间使用英文的逗…

Vue中渲染函数

why? 在绝大多数情况下&#xff0c;Vue 推荐使用模板语法来创建应用。然而在某些使用场景下&#xff0c;我们真的需要用到 JavaScript 完全的编程能力。这时渲染函数就派上用场了。 例如&#xff1a;下方要在多个模型上方设置对话框&#xff0c;如果使用Vue模板语法相对较困难…

c#中的From窗体

Windows Forms&#xff08;简称WinForms&#xff09;是.NET Framework中用于构建Windows桌面应用程序的一个组件。Form 类是WinForms中最基本的窗口类型&#xff0c;提供了一个容器&#xff0c;可以容纳控件&#xff08;如按钮、文本框、标签等&#xff09;。 以下是Form的一些…

数据结构之判断平衡二叉树详解与示例(C,C++)

文章目录 AVL树定义节点定义计算高度获取平衡因子判断是否为平衡二叉树完整示例代码结论 在计算机科学中&#xff0c;二叉树是一种非常重要的数据结构。它们被广泛用于多种算法中&#xff0c;如排序、查找等。然而&#xff0c;普通的二叉树在极端情况下可能退化成链表&#xff…

autoware.universe源码略读(3.17)--perception:occupancy_grid_map_outlier_filter

autoware.universe源码略读3.17--perception:occupancy_grid_map_outlier_filter Overview&#xff08;Class&#xff09;RadiusSearch2dfilter&#xff08;Class Constructor&#xff09;RadiusSearch2dfilter::RadiusSearch2dfilter&#xff08;mFunc&#xff09;RadiusSearc…

Transformer系列总结

文章目录 1、Transformer基本原理介绍1.Transformer 结构2.嵌入表示层3. 注意力层3.1 输⼊矩阵3.2 查询矩阵和键矩阵3.3 Q和K的转置的点击除以键向量维度的平⽅根3.4 应⽤softmax函数3.5 注意力矩阵通过分数矩阵乘以值矩阵得出3.6 注意⼒矩阵 4. 前馈层5. 残差连接与层归一化6.…

虚幻引擎,体积雾、体积光、镜头泛光

1、体积雾 这里介绍的是用于地面的体积雾效果&#xff0c;效果如图1-1&#xff1a; 图1-1 首先&#xff0c;需要场景中存在指数级高度雾并开启体积雾&#xff08;如图1-2&#xff09;。然后创建材质&#xff0c;材质域选择“体积”&#xff0c;混合模式选择“Additive”。材质节…

二叉树的构造问题 | LeetCode刷题笔记 | 每日练习 | 深度优先遍历| 广度优先遍历 | Java

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;本篇分享的是与构造二叉树&#x1f384;有关的问题&#xff0c;有关二叉树的基础知识可以点击此处跳转学习&#x1f448;&#xff0c;构造二叉树的就是…