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

article/2025/8/16 11:19:27

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-l5b-D5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16


 目录

一、前言

二、基本概念

三、栈的表示和实现

1.顺序栈

2.链栈

四、栈的常见算法实现

1.初始化

2.判空

3.判满

4.顺序栈取栈顶元素

5.顺序栈入栈

6.顺序栈出栈

五、双栈

1.双端顺序栈进栈操作

2.双端顺序栈出栈操作

六、栈的应用举例

1.回文游戏

2.多进制输出

3.表达式求值

4.地图染色

七、总结与提高


一、前言

  • 掌握栈这种抽象数据类型的特点,在相应的实际问题中正确应用相关代码
  • 掌握栈类型的两种实现方法

二、基本概念

  • 定义:只允许在一端进行插入或删除的线性表
  • 栈顶(top):允许进行插入或删除的一端
  • 栈底(bottom):与栈顶相对应的一端
  • watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-l5b-D5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16
  • 特点:先进后出

三、栈的表示和实现

1.顺序栈

  • 定义:一组地址连续的存储单元依次存放自栈底到栈顶的数据元素
  • top :用来表示栈顶元素的位置
    • top==-1表示空栈
    • top==NULL表示栈不存在
    • top>stacksize元素溢出

结构体定义:

#define n 500//定义顺序栈大小
struct stack
{int top;//栈顶指针int a[n];//顺序栈数组
}SeqStack;

2.链栈

结构体定义:

typedef struct node
{int data;//定义数据类型struct node*next;//定义链栈}ChaiinStack;

特点: 

  •  链栈没有栈满问题,大小可以随时扩充
  • 插入和删除在栈顶处实行
  • 链式栈的栈顶在链头
  • 与单链表存储结构一致,与顺序表逻辑结构一致

四、栈的常见算法实现

动态图:

1c5899adba32435c852ae9574fa3d655.gif

 算法讲解:

  • push入栈,指针top向上移动

  • pop出栈,指针top向下移动

1.初始化

void InitStack(SeqStack *S)
{	/*构造一个空栈S*/S->top = -1;
}

2.判空

/*顺序栈判栈空*/
int IsEmpty(SeqStack *S){     /*判断栈S为空栈时返回值为真,反之为假*/return(S->top==-1?TRUE:FALSE);}

3.判满

/*顺序栈判栈满*/
int IsFull(SeqStack *S)	
{   /*判断栈S为满栈时返回值为真,反之为假*/return(S->top==Stack_Size-1?TRUE:FALSE);
}

4.顺序栈取栈顶元素

int GetTop(SeqStack *S,StackElementType *x)
{  	/* 将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变 */if(S->top == -1)      /*栈为空*/return(FALSE);else{*x = S->elem[S->top];return(TRUE);}	
}

5.顺序栈入栈

/*顺序栈出栈*/
int Pop(SeqStack *S,StackElementType *x)
{  /* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */if(S->top == -1)    /*栈为空*/return(FALSE);else{*x = S->elem[S->top];S->top++;    /* 修改栈顶指针 */return(TRUE);}
}

6.顺序栈出栈

/*顺序栈出栈*/
int Pop(SeqStack *S,StackElementType *x)
{  /* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */if(S->top == -1)    /*栈为空*/return(FALSE);else{*x = S->elem[S->top];S->top--;    /* 修改栈顶指针 */return(TRUE);}
}

五、双栈

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-l5b-D5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

 ab653c3e7b3a4e589c4fe74ad9220248.gif

算法详解: 

  • 两个顺序栈stack1,stack2
  • 顺序栈1从左到右依次入栈,top1++
  • 顺序栈1从右向左依次入栈,top2--
  • 栈满条件:top1+1==top2

1.双端顺序栈进栈操作

/*双端顺序栈进栈操作。*/
int Push(DqStack *S, StackElementType x, int i)
{	/*把数据元素x压入i号堆栈*/if(S->top[0]+1==S->top[1])    /*栈已满*/return(FALSE);switch(i){case 0:S->top[0]++;	S->Stack[S->top[0]]=x;	break;case 1:S->top[1]--;	S->Stack[S->top[1]]=x;	break;default:  /*参数错误*/return(FALSE)}return(TRUE);
}

2.双端顺序栈出栈操作

/*双端顺序栈出栈操作。*/
int Pop(DqStack *S,StackElementType *x,int i)
{	/* 从i 号堆栈中弹出栈顶元素并送到x中 */switch(i){case 0:if(S->top[0]==-1)  return(FALSE);*x=S->Stack[S->top[0]];   S->top[0]--;	break;case 1:if(S->top[1]==M)  return(FALSE);*x=S->Stack[S->top[1]];	S->top[1]++;	break;default:return(FALSE);}return(TRUE);
}

六、栈的应用举例

1.回文游戏

  1. 读入给定的字符串
  2. 吸收空格,输出和原串比较
  3. 如果和原串相等,则是回文串

2.多进制输出

  1. 把十进制转化为八进制
  2. %8取余数放入栈,/8继续操作
  3. 把栈中的元素输出

3.表达式求值

7805245b39334fa4aa0663e3e0e89db7.png

  • 给出中缀表达式,利用栈的特点求出后缀表达式 

4.地图染色

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-l5b-D5a6d6LSd,size_20,color_FFFFFF,t_70,g_se,x_16

七、总结与提高

  • 对于使用C++编程来说,上文顺序栈的判空、判满、插入、删除等等一系列代码,不需要你完全掌握,C++的STL标准库中为你准备好了函数等你调用。

 C++stack头文件:

#include<stack>
//#include<bits/stdc++.h>或者万能头文件
using namespace std;

 C++stack具体操作:

  • 用stack定义s类(定义什么都可以,只要把s变成定义的字母就可以调用C++中的函数),具体使用方法为:
函数用法
s.empty()判断栈是否为空,不为空返回1,为空返回0
s.size()返回栈中元素个数
s.top()返回栈顶元素,但不删除该元素
s.pop()返回栈顶元素,删除该元素
s.push()将元素插入栈

力扣习题:

        一、栈实现队列

        二、后缀表达式

        三、回文链表

        四、栈的压入与弹出序列

        五、计算器

        六、甲板上的战舰

附录:

  • 【图解数据结构】串全面总结

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

  • 【图解数据结构】队列全面总结

  • 【图解数据结构】数组和广义表全面总结

  • 【图解数据结构】排序全面总结(一)

  • 【图解数据结构】排序全面总结(二)

  • 【图解数据结构】树和二叉树全面总结(上)

  • 【图解数据结构】数和二叉树全面总结(中)

  • 欢迎大家订阅专栏!


http://chatgpt.dhexx.cn/article/rMmaPige.shtml

相关文章

数据结构——栈

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

遥感影像百分比线性拉伸

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

遥感影像分类方法

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

遥感影像配准

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

遥感图像分类技术

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

遥感图像分类

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

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

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

遥感数据下载平台汇总

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

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

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

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

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

遥感图像入门

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

遥感影像的几何校正

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

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

遥感影像数据下载网站整理 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系列国产卫星遥感影像数据图像免费批量下载方法

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

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

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

完全免费的在线遥感影像下载器-转载

链接&#xff1a;link 转载学习使用&#xff0c;可免费下载&#xff01;

常用遥感数据下载平台

国内常用卫星数据下载网站 1&#xff0c;AI Earth 地球科学云平台 网址&#xff1a;AI Earth 数据&#xff1a;Landsat、Sentinel、MODIS、地形数据。 2&#xff0c;地理空间数据云 网址&#xff1a;http://www.gscloud.cn/ 数据&#xff1a;多种卫星数据 3&#xff0c;中…

Landsat遥感影像下载

摘要&#xff1a;本篇文章主要介绍下载遥感卫星影像数据常用的几种的获取方法。适合刚接触遥感这个领域不久却需要下载和使用遥感影像的人群。 本文着重介绍陆地资源卫星Landsat系列卫星的遥感影像查询和下载。 目录 1、陆地资源卫星Landsat系列卫星基本介绍 1.1 Landsat-5介绍…

遥感图像下载指南

文章目录 1、高分系列&#xff08;收费&#xff09;1.1 下载方式&#xff08;1&#xff09;&#xff1a;登录中国资源卫星应用中心1.2 下载方式&#xff08;2&#xff09;&#xff1a;登录数据分发系统 2、GOCI图像下载说明(免费),登录韩国海洋卫星中心3、MODIS图像下载4 、附录…

遥感数据下载网站

【补充1&#xff1a;】ASF DACC 12.5m的dem 数据&#xff08;https://search.asf.alaska.edu/#/&#xff09; 只需要注册一个账号就免费下载&#xff0c;Sentinel-1&#xff0c;ALOS PALSAR和其他SAR数据是开放访问的。可能需要cross wall。 【补充2&#xff1a;】陆地观测卫…