数据结构 栈-链栈及基本操作

article/2025/8/16 8:59:52

目录

  • 一.栈的定义
  • 二.栈的特点
  • 三.栈的理解
  • 四.链栈引入
  • 五.链栈定义
  • 六.链栈的结构体设计
  • 七.链栈的基本操作
    • 7.1链栈的初始化
    • 7.2链栈判空
    • 7.3链栈入栈
    • 7.4链栈出栈
    • 7.4取栈顶元素
  • 八.总结

一.栈的定义

栈是限定仅在表尾进行插入和删除操作的数据结构(受到限制的线性表)。
我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素为空栈。

二.栈的特点

后进先出

比如word,浏览器网页等一系列软件中,都有撤销的操作,就是利用栈的这种方式来实现的,可能不同软件的代码不同,但是他们的原理是一样的均为:后进先出
请添加图片描述

三.栈的理解

  1. 栈是一个线性表,有前驱后继关系,只不过这里的表尾指的是栈顶。
  2. 栈限制了线性表的插入和删除位置,这也导致栈底是固定的。
  3. 栈的插入操作,叫做进栈;可以理解为子弹入弹夹。
  4. 栈的删除操作,叫做出栈;可以理解为子弹出弹夹。

在这里插入图片描述

四.链栈引入

既然栈是属于线性表的一种,那么存储结构也就分为顺序存储和链式存储,这里我们着重讲解链式存储结构。

五.链栈定义

栈的链式存储结构,简称链栈。

对于栈来说,只在栈顶做插入和删除操作,由于单链表有头指针,栈顶指针也是必须的,那我们干脆就将头指针和栈顶指针合二为一,将栈顶放在单链表的头部。通常对于链栈是不需要头结点的

对于链栈来说,一般不会存在栈满的情况,如果这种事情真的发生,那么此时的计算机操作系统也将会面临死机崩溃的情况,那就不单单是这个链栈是否溢出的问题了。对于链表来说,链表为空的表示是头结点指向空,那么对于链栈来讲,链栈为空就是栈顶指针指向空(top = NULL)。
在这里插入图片描述

六.链栈的结构体设计

代码如下:

// 链栈的存储结构
typedef struct StackNode
{int data;struct StackNode *next;
}StackNode,*LinkStack;

七.链栈的基本操作

对于链栈来说作为线性表的一种,操作也就那么几种,这里我们对以下几种操作进行详解:初始化,判断是否为空,入栈,出栈,取栈顶元素等。

7.1链栈的初始化

链栈的初始化可以理解为构造一个空栈,将栈顶指针top所指头结点的指针域置为NULL,因为此时栈中还没有数据元素。
代码如下:

LinkedStack Init_LinkedStack()
{LinkedStack top = (LinkedStackNode *)malloc(sizeof(LinkedStackNode));  //栈顶指针变量if(top != NULL){top->next = NULL;}return top;
}

7.2链栈判空

判断链栈是否为空,只需要判断栈顶的指针域是否指向空,如果指向空则栈空,相反亦然。


bool LinkedStack_Empty(LinkedStack top)
{if(top->next == NULL)//如果栈顶的指针域指向空,则栈空{return True;}else{return False;}

7.3链栈入栈

入栈就是:

  1. 先对数据域进行赋值;
  2. 然后让新结点指向栈顶指针;
  3. 最后将栈顶指针交给新节点。

假设元素值为e的新节点是s,top为栈顶指针:
请添加图片描述

代码如下:


int Push(LinkedStack *s  ,elemtype e)
{LinkedStackNode s= (LinkedStackNode )malloc(sizeof(LinkedStackNode));s->data=e;s->next=s->top;//把当前的栈顶元素赋值给新结点的直接后继.s->top=s;//把新节点s赋值给栈顶指针s->cout++;return 1;
}

7.4链栈出栈

出栈就是:

  1. 将要删除的元素的值交给临时变量,将栈顶指针交给临时节点;
  2. 将栈顶指针下移;
  3. 最后释放临时节点(即完成删除)。

假设变量p用来存储要删除的栈顶结点,将栈顶指针向下移一位,最后释放p即可:
请添加图片描述
代码如下:

int Pop_LinkedStack(LinkedStack *s,elemtype *e)
{LinkedStackNode *p;if(stackempty(*s))return error;*e=s->top->data;p=s->top;   //将栈顶结点赋值给ps->top=s->top->next;//使得栈顶结点指针下移一位,指向后一结点free(p);//释放结点s->count--;	return 1;}
}

7.4取栈顶元素

读取栈顶元素,并返回其值,该操作与出栈的区别是栈顶元素并不删除,所以不用修改头结点的指针域即可。

int Get_LinkedStack(LinkedStack top,elemtype *x)
{if(top->next == NULL){return 0;}else{*x = top->next->data;return 1;}
}

八.总结

对比顺序栈和链栈,如果栈的使用过程中元素变化不可预料,有时小,有时大,那么最好用链栈;反之,如果他的变化在可控范围之内建议使用顺序栈会更好点。

(小白一位,如有错误欢迎指正)


http://chatgpt.dhexx.cn/article/3qZGYDL2.shtml

相关文章

数据结构之——栈

文章目录 数据结构之——栈一:栈的定义:二:栈的抽象数据类型:三:栈的顺序存储结构及其实现:1: 预说明:2:栈的顺序存储结构——结构定义:3:栈的顺序存储结构——进栈操作4…

数据结构与算法(3)栈

栈 1、栈的一个实际需求 请输入一个表达式:7x2x2-51-53-3 2、栈的介绍 栈的英文为stack 栈是一个**先入后出(FILO-First In Last Out) **的有序列表 栈(stack) 是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端…

【数据结构】栈

栈的概念及结构 在学习栈前,我们先看一下栈的正式解释: 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 L…

什么是栈?

本文将介绍一个重要的数据结构—栈,和之前讲到的链表、数组一样也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能…

【图解数据结构】栈全面总结

目录 一、前言 二、基本概念 三、栈的表示和实现 1.顺序栈 2.链栈 四、栈的常见算法实现 1.初始化 2.判空 3.判满 4.顺序栈取栈顶元素 5.顺序栈入栈 6.顺序栈出栈 五、双栈 1.双端顺序栈进栈操作 2.双端顺序栈出栈操作 六、栈的应用举例 1.回文游戏 2.多进制…

数据结构——栈

栈和队列 栈和队列介绍特点栈、队列与一般线性表的区别栈——stack栈的基本运算栈的存储结构顺序栈链栈 栈的应用 栈和队列 介绍 栈和队列是在软件设计中常用的两种数据结构,它们的逻辑结构和线性表相同 特点 栈和队列在运算上受到了限制:栈是按照“…

遥感影像百分比线性拉伸

AI Earth地球科学云平台开发者模式提供了丰富的遥感数据和函数计算能力,下面介绍结合AIE Notebook,实现遥感数据的百分比线性灰度拉伸。 本期开发者实践案例——遥感影像百分比线性拉伸 灰度拉伸 (GrayScale Stretch) 是遥感影像处理过程中的重要步骤&…

遥感影像分类方法

最初的遥感影像分类是通过目视解译(濮静娟, 1984)来完成的,对研究人员的主观意识有较强的依赖性,而且效率较低,适用于数据量较小的情况,通常作为其他方法对比的对象。目前的遥感图像分类主要以计算机分类为主,因此按照…

遥感影像配准

文章目录 前言步骤1.ENVI:打开Image Registration Workflow2.Image Registration Workflow(1)选择GF2为Base Image File,某季节Sentinel2为Warp,然后Next(2)修改该参数为100(3)人为选择5个左右控制点,然后Next(4)删除离谱点(5)在E…

遥感图像分类技术

什么是遥感图像分类技术? 图像分类是将土地覆盖类别分配给像素的过程。例如,这9个全球土地覆盖数据集将图像分为森林、城市、农业和其他类别。 https://gisgeography.com/free-global-land-cover-land-use-data/ 一般来说,这是遥感中的三种主…

遥感图像分类

遥感图像分类 一、背景简介 遥感图像分类就是利用计算机通过对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征,将图像中各个像元按照某种规则或算法划分不同的类别,然后获得遥感图像中与实际地物的对应信息,从而实现…

WorldView卫星遥感影像数据/米级分辨率遥感影像

数据样例:百度云下载链接:https://pan.baidu.com/s/17ofPwpDM3OCHnE-LuhvUp 提取码:i0m4 目前世界上最常用的高分辨率卫星影像莫过于WORLDVIEW系列了,在卫星遥感圈内可谓大名鼎鼎,不仅具有超高的分辨率还具有其他高分…

遥感数据下载平台汇总

1中国资源卫星应用中心http://www.cresda.com.cn中巴卫星、HJ星、ZY系列 、GF系列2中科院对地观测与数字地球科学中心http://ids.ceode.ac.cn/Index.aspxERS卫星,Enviset_1卫星,法国的spot4卫星,中巴资源卫星,landset-5-73地球系统…

遥感多光谱数据下载与预处理(一、数据选择 下载)

首先说明本人并非专业大牛,不是教程贴只是记录一下学习过程和大家交流,过程有不严谨不合规范不对的地方欢迎各位大神指正。 本人目前做过接触过最多的是多光谱遥感数据,也是与无人机、雷达、高光谱等相比最简单的一种,这是我自己总…

地理空间数据云下载遥感影像

目录 1、先上网址:www.gscloud.cn 2、介绍界面: 2.1 “数据资源” 2.2 “高级检索” 1、先上网址:www.gscloud.cn 2、介绍界面: 地理空间数据云,作为国内免费下载遥感卫星影像的一个大平台,随着年代发…

遥感图像入门

遥感图像入门 一、 遥感基本概念地物光谱特性3S 技术瑞利散射大气窗口 二、 遥感系统的组成三、 遥感分类四、 遥感数字图像处理图像与数字图像数字图像获取时的基本参数数字图像类型 一、 遥感基本概念 遥感(Remote Sensing)——遥远的感知,在未接触物体的情况下获…

遥感影像的几何校正

一、引言(INTRODUCTION) 图像校正主要是指辐射校正和几何校正。辐射校正包括传感器的辐射校正、大气校正、照度校正遗迹条纹和斑点的判定和消除。几何校正就是校正成像过程中造成的各种几何畸变,包括几何粗校正和几何精校正。几何粗校正是针对…

遥感影像数据下载网站整理

遥感影像数据下载网站整理 1 遥感影像数据1.1 综合遥感数据1.1.1 USGS EarthExplore1.1.2 LAADS DAAC1.1.3 Copernicus Open Access Hub1.1.4 GloVis1.1.5 地理空间数据云 1.2 雷达遥感数据1.2.1 ASF DAAC 1.3 夜光遥感数据1.3.1 NOAA EOG1.3.2 珞珈一号 1.4 海洋卫星数据1.4.1…

高分GF与环境HJ系列国产卫星遥感影像数据图像免费批量下载方法

本文介绍高分(GF)与环境(HJ)等主要国产卫星遥感数据的免费下载(包括批量下载)方法。 首先,进入中国资源卫星应用中心官网:http://www.cresda.com/CN/。选择“查询系统”。 随后登录系…

【随笔】那些免费友好的遥感影像数据下载网站

1 .影像数据 1.1 地理空间数据云 推荐指数:❤❤❤❤❤交互界面:友好传输速度:0.4m/s数据集:开源数据集较为丰富,Landsat系列数据及DEM数据较丰富,但也有一些数据无法下载。 网址:地理空间数据…