数据结构的概念大合集03(栈)

news2024/11/26 8:36:50

概念大合集03

  • 1、栈
    • 1.1 栈的定义和特点
    • 1.2 栈的基础操作
    • 1.3 栈的顺序存储
      • 1.3.1 顺序栈
      • 1.3.2 栈空,栈满,进栈,出栈的基本思想
      • 1.3.3 共享栈
        • 1.3.3.1 共享栈的4要素
    • 1.4 栈的链式存储
      • 1.4.1 链栈的实现
      • 1.4.2 链栈的4个要素

1、栈

1.1 栈的定义和特点

       栈是一种只能在一端进行插入或删除操作的线性表。在栈中,允许插入和删除操作的一端称为栈顶,另一端称为栈底。当栈为空时,称为空栈。栈的插入操作称为进栈或入栈,删除操作称为出栈退栈。

       栈的特点是“后进先出”,即后进栈的元素先出栈,英文表示为“last in first out,即LIFO

1.2 栈的基础操作

函数名函数作用
InitStack(&s)初识化线性表,构造一个空列表
DestroyStack(&s)销毁线性表,释放为线性表L分配的内存空间
StackEmpty(s)判断线性表是否为空表,若L为空表,则返回true,否则返回false
Push(&s,e)进栈,将元素e插入栈中作为栈顶元素
Pop(&s,&e)出栈,从栈s中删除栈顶元素,并将其赋值给e
GetTop(s,&e)取栈顶元素,返回当前的栈顶元素,并将其赋值给e。

1.3 栈的顺序存储

1.3.1 顺序栈

       同线性表一样,栈里面的元素也可以采用顺序存储结构,即分配一块连续的存储空间来存放栈中的元素,并用一个变量(例如top)指向当前的栈顶元素,以反映栈中元素的变化。这种采用顺序结构的栈称为顺序栈。
请添加图片描述

1.3.2 栈空,栈满,进栈,出栈的基本思想

  • 栈空:s->top == -1。
  • 栈满:s->top == MaxSize - 1 (data数组的最大下标)。
  • 进栈:先将栈顶指针top增1,然后将元素e放在栈顶指针处。
  • 出栈:现将栈顶指针top处元素取出放在e中,然后将栈顶指针减1.
    请添加图片描述

1.3.3 共享栈

       顺序栈的一种特殊表现形式,将两个类型相同的栈结合起来,这样可以避免栈溢出或内存浪费的情况。
       在设计共享栈的时候,由于一个数组(大小为MaxSize)有两端点,两个栈有两个栈底,让一个栈的栈底为数组的是始端,即下表为0处,另一个栈的栈底的为数组的末端,即下表为MaxSize-1处,这样,在两个栈中进栈元素时,栈顶向中间伸展。
请添加图片描述

1.3.3.1 共享栈的4要素
  • 栈空:栈1为空top == -1;栈2为空top2 == MaxSize。
  • 栈满:top1 == top2-1。
  • 进栈:栈1进栈top1++ ; data[top1] = x; ==> data[++top1] = x;
               栈2进栈top-- ; data[top2] = x; ==> data[–top] = x;
  • 出栈:栈1出栈x = data[top1];top-- ; ==> x = data[top1–];
               栈2出栈x = data[top2] ; top2++; ==> x = data[top2++];

1.4 栈的链式存储

       即采用链式存储的栈称为链栈,但是与链表不同的是,链栈只有单链栈,不存在双链栈,所以将单链栈也直接称为链栈。

1.4.1 链栈的实现

       采用带头结点的单链表来实现栈链

1.4.2 链栈的4个要素

  • 栈空:s->next == NULL;
  • 栈满:因为是链栈,只有在内存溢出的情况下,才会出现满栈的情况,所以一般情况不考虑;
  • 进栈:新建一个结点存放元素e(由p指向它),将结点p插入头结点之后。
  • 出栈:取出首结点的data值并将其删除

注:
本文将主要探讨栈的概念,其中提及的各个函数操作将在后续的文章中详细展示,敬请读者期待。
上一篇文章
数据结构的概念大合集02(线性表)
下一篇文章
数据结构的概念大合集04(队列)

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

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

相关文章

酷开系统用电视为居家生活打开精彩窗口|酷开科技|酷开会员|

随着互联网的发展,电视也承载了更多的功能。相比于传统的电视,如今的智能电视屏幕更大、分辨率更高、色彩更加鲜艳,能够呈现出更加逼真的画面效果。当观众观看大屏电视时,仿佛置身于电影大幕的场景之中,感受到更为震撼…

边缘计算+WEB端应用融合:AI行为识别智能监控系统搭建指南 -- 整体介绍(一)

专栏目录 边缘计算WEB端应用融合:AI行为识别智能监控系统搭建指南 – 整体介绍(一) 边缘计算WEB端应用融合:AI行为识别智能监控系统搭建指南 – 边缘设备图像识别及部署(二) 边缘计算WEB端应用融合&#xf…

洛谷_P2404 自然数的拆分问题_python写法

P2404 自然数的拆分问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路记录: 这道题是一道简单的DFS。 n int(input()) data [0 for _ in range(110)] def dfs(sum, p, cnt):if sum>n:returnif sum n:print(data[0],end)for i in range(1,cnt):print(f{…

centos7安装jdk详细步骤(yum安装与手动安装)

centos7安装jdk详细步骤(yum安装与手动安装) 一、使用yum安装1. 准备工作2. 检查系统是否自带jdk3. 安装jdk 二、手动安装jdk1. 下载上传jdk2. 安装jdk3. 配置环境变量 一、使用yum安装 1. 准备工作 如果你的机器可以联网可以使用此方法 ping www.baidu…

YOLOv7 | 添加GSConv,VoVGSCSP等多种卷积,有效提升目标检测效果,代码改进(超详细)

⭐欢迎大家订阅我的专栏一起学习⭐ 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 YOLOv5涨点专栏:http://t.csdnimg.cn/QdCj6 YOLOv7专栏: http://t.csdnimg.cn/dy…

51-31 CVPR’24 | VastGaussian,3D高斯大型场景重建

2024 年 2 月,清华大学、华为和中科院联合发布的 VastGaussian 模型,实现了基于 3D Gaussian Splatting 进行大型场景高保真重建和实时渲染。 Abstract 现有基于NeRF大型场景重建方法,往往在视觉质量和渲染速度方面存在局限性。虽然最近 3D…

Git小乌龟安装及使用教程

一、Win7安装git 软件下载地址:git for windows 安装过程直接默认下一步,直到安装结束。 安装结束后重启一下。 安装完成后,在文件夹空白处右键出现以下几个标识,说明安装成功。 二、安装tortoise git(乌龟git&…

flutter 局部view更新,dialog更新进度,dialog更新

局部更新有好几种方法,本次使用的是 StatefulBuilder 定义 customState去更新对话框内容 import package:flutter/cupertino.dart; import package:flutter/material.dart;class ProgressDialog {final BuildContext context;BuildContext? dialogContext;double _…

帮助读者掌握C语言编程基础知识的书籍

帮助读者掌握C语言编程的基础知识,了解如何将人工智能技术应用于自己的编程项目。 人工智能编程(赋能C语言) 作者: 黄箐、廖云燕、曾锦山、邢振昌 ISBN号: 9787302648796 出版日期: 2023-11-01 本书以C…

【linux】环境变量(进程二)

这里写目录标题 命令行参数:环境变量: 命令行参数: 不谈命令行参数就谈环境变量就是耍流氓。 相信我们在C语言阶段都在main函数里见过参数。 例如int main(int argc, char* argv[]) 这是什么东西呢? 话不多说我们直接打印一下看…

Vue2(八):脚手架结构、render函数、ref属性、props配置项、mixin(混入)、插件、scoped样式

一、脚手架结构分析 crlc终止刚刚搭建的vue。 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ …

利用WebGL绘制简单几何

利用WebGL绘制最简单的几何图形 一、WebGL简介 WebGL是一种用于在网页上渲染交互式3D和2D图形的JavaScript API。它基于OpenGL ES 2.0,提供了一种在浏览器中使用硬件加速图形的方式。 二、图形系统绘图流程 图形系统的通用绘图流程会包括六个部分: …

python_django网红基地孵化园场地管理系统flask

作为一个管理孵化园的网络系统,数据流量是非常大的,所以系统的设计必须满足使用方便,操作灵活的要求。所以在设计孵化园管理系统管理系统应达到以下目标: (1)界面要美观友好,检索要快捷简易&…

python问题:vscode切换环境,pip安装库网络错误,不使用anaconda安装库

python问题:vscode切换环境,pip安装库网络错误 vscode切换环境pip安装库网络错误 不使用anaconda安装库 记录一下遇见的python问题。 vscode切换环境 在vscode上面的搜索框输入 > select interpreter然后选择需要的环境。 pip安装库网络错误 用…

数据丢失怎么办?不可不知道的3个恢复方法分享!

“作为一名电脑小白,刚买了电脑后我就把所有学习资料都保存在电脑上了,刚刚发现有部分比较重要的数据找不到了,我应该怎么操作才能恢复这些文件呢?” 数据丢失,对于任何个人或企业来说,都是一件令人头疼的事…

Python学习从0到1 day17 Python异常、模块、包

不走心的努力,都是在敷衍自己 ——24.3.19 万字长文,讲解异常、模块、包,看这一篇就足够啦 什么是异常? 当检测到一个错误时,python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的异常&am…

「滚雪球学Java」:安全(章节汇总)

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!&#xf…

代码随想录day26(1)二叉树:二叉搜索树的最小绝对差(leetcode530)

题目要求:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 思路:最简单的想法就是新建数组,通过中序遍历将节点值全都存入数组中(有序),然后计算相邻两节…

【堡垒机】企业购买堡垒机的七大需求你知道吗?

目前想了解堡垒机的企业越来越多了,采购堡垒机的企业也越来越多了。那企业购买堡垒机的七大需求你知道吗?今天我们小编就跟大家一起来探讨一下,仅供参考哦! 企业购买堡垒机的七大需求 需求1、简化运维流程,提高运维工…

【Docker】-- 如何安装docker

一、安装docker 首先要安装一个yum工具 yum install -y yum-utils 安装成功后,执行命令,配置Docker的yum源: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 最后,执行命令&#x…