【数据结构——栈篇】

article/2025/8/16 9:05:46

【数据结构——栈篇】

目录

  • 【数据结构——栈篇】
  • 一、栈的顺序存储——顺序栈
      • 1、顺序栈的表示和实现
      • 2、顺序栈的定义
      • 2、顺序栈初始化
      • 3、顺序栈入栈
      • 4、顺序栈出栈
      • 5、取顺序栈栈顶元素
      • 6、输出栈内容
  • 二、栈的链式存储——链栈
      • 1、链栈的存储结构
      • 2、栈链的初始化
      • 3、链栈的入栈
      • 4、链栈的出栈
      • 5、取链栈栈顶元素
      • 6、输出链栈的内容

一、栈的顺序存储——顺序栈

1、顺序栈的表示和实现

因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,故需要一个变量top来指示当前栈顶的位置,通常称top为栈顶指针

2、顺序栈的定义

#define MAXSIZE 100
typedef struct
{SElemType* base;//栈底指针SElemType* top;//栈顶指针int stacksize;//可使用的最大容量
}SqStack;SqStack S;//定义顺序栈
S.stacksize = s;//栈的大小
S.base == S.top;//空栈
S.top - S.base == stacksize;//满栈

2、顺序栈初始化

算法思想:
1、分配空间并检查空间是否分配成功,否则返回错误
2、栈顶指针top初始化为栈底指针base
3、stacksize = 栈的最大容量

Status IniStack(SqStack& S)
{S.base = new SElemType[MAXSIZE];//分配空间if (!S.base) exit(OVERFLOW);//分配失败,返回错误S.top = S.base;//栈顶指针初始化为栈底指针S.stacksize = MAXSIZE;//初始化栈的最大容量return OK;
}

3、顺序栈入栈

在这里插入图片描述

算法思想
1、判断是否栈满,若满则出错
2、新元素e压入栈顶
3、栈顶指针+1

Status Push(SqStack& S, SElemType e)
{if (S.top - S.base == S.stacksize)return ERROR;//栈满*S.top = e;//新元素e压入栈顶S.top++;//栈顶指针+1return OK;
}

4、顺序栈出栈

在这里插入图片描述

算法思想
1、判断是否栈空,若空则出错
2、栈顶指针-1
3、获取栈顶元素e

Status Pop(SqStack& S, SElemType& e)
{if (S.top == S.base)return ERROR;//栈空报错--S.top;//栈顶指针-1e = *S.top;//获取栈顶元素ereturn OK;
}

5、取顺序栈栈顶元素

SElemType GetTop(SqStack S)
{if (S.top != S.base)//栈非空return *(S.top - 1);//返回栈顶元素的值//栈顶指针不变
}

6、输出栈内容

void OutPut_SqS(SqStack S)
{SElemType* p;if (S.top == S.base)printf("空栈!\n");elsefor (p = S.top - 1;p >= S.base;p--)printf("%d\n", *p);
}

二、栈的链式存储——链栈

1、链式存储方式表示的栈称链栈
2、运算受限的单链表
3、链表的头指针就是栈顶
4、不需要头结点
5、插入与删除仅在栈顶执行

1、链栈的存储结构

在这里插入图片描述

typedef struct StackNode
{SElemType data;struct StackNode* next;
}StackNode,*LinkStack;LinkStack S;

2、栈链的初始化

在这里插入图片描述

算法思想:
1、不需要头结点
2、链栈的头指针就是栈顶
3、栈链无栈满问题,空间可扩充
4、空栈相当于头指针指向NULL

Status IniStack(LinkStack& S)
{//构造一个空栈,栈顶指针置空S = NULL;return OK;
}

3、链栈的入栈

在这里插入图片描述

算法思想:
1、为入栈元素e分配空间,用指针p指向
2、将新结点指针域置为e
3、将新结点插入栈顶
4、修改栈顶指针为p

Status Push(LinkStack& S, SElemType e)
{p = new StackNode;//生成新结点p->data = e;//将新结点数据域置为ep->next = S;//将新结点插入栈顶S = p;//修改栈顶指针为preturn OK;
}

4、链栈的出栈

在这里插入图片描述

算法思想:
1、判断是否是空栈,若是空栈,返回错误
2、将栈顶元素赋值给e
3、临时保存栈顶元素的空间,以备释放
4、修改栈顶指针,指向新的栈顶元素
5、释放原栈顶元素的空间

Status Pop(LinkStack& S, SElemType& e)
{if (S == NULL)return ERROR;//栈空e = S->data;//将栈顶元素存储到e中p = S;//用p临时保存栈顶元素的空间,以备释放S = S->next;//修改栈顶指针delete p;//释放原栈顶元素的空间return OK;
}

5、取链栈栈顶元素

在这里插入图片描述

SElemType GetTop(LinkStack S)
{if (S != NULL)return S->data;
}

6、输出链栈的内容

在这里插入图片描述

void OutPut(LinkStack S)
{p = S;if (!p)printf("空栈!");elsewhile (p){printf("%d", p->data);p = p->next;}
}

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

相关文章

数据结构遍历顺序栈_数据结构和算法-栈结构

栈的定义 栈是一种后进先出的数据结构。 栈是限制插入和删除只能在一个位置上的线性表。允许删除和插入的一端位于表的末端,叫做栈顶。不允许删除和插入的另一端叫做栈底。对栈的基本操作有push(压栈)和pop(出栈)。 图示: 栈的实现 栈的实现主要包括两种方式:顺序栈和链表栈…

数据结构之栈以及栈的基本操作

栈 文章目录 栈前言进栈出栈的变化形式栈的实现栈的顺序存储结构:栈的链式存储结构:文件的创建栈结构的定义栈的初始化入栈出栈获取栈顶元素获取栈中有效元素个数检测栈是否为空销毁栈 括号匹配问题 前言 栈是限定仅仅在表尾进行插入和删除操作的线性表。…

【数据结构二】栈

数组是一种线性结构,并且可以在任意位置插入和删除数据。但是有时候,为了实现某些功能,必须对这种任意性加以限制。栈和队列就是比较常见的受限的线性结构。 栈:Stack,也是一种常见的数据结构。它是一种受限的线性结构…

数据结构 栈 入栈 输出 出栈

数据结构 栈 入栈 输出 出栈 #include<bits/stdc.h> /* #include<iostream> #include<> */ using namespace std; //pA->p(Next)pB->p(top)含义是pA指向pB typedef struct Node//有节点的数据类型 {int data;//数据域struct Node * pNext; }NODE,*PN…

数据结构-栈

栈的定义 栈是一种特殊的线性表&#xff0c;仅允许在表的一端进行插入和删除运算。这一端被称为栈顶&#xff08;top&#xff09;&#xff0c;相对地&#xff0c;把另一端称为栈底&#xff08;bottom&#xff09;。向一个栈插入新元素又称作进栈、入栈或压栈&#xff08;push&…

数据结构-栈及栈的应用

目录 栈的概述 部分算法分析 顺序栈的表示和实现 global.h Stack.h StackTest.cpp 运行结果 栈的应用 数的任意进制转换 括号匹配检验 栈的概述 栈是一种重要的线性结构&#xff0c;属于一种操作受限的线性表栈(stack) 是限定仅在表尾进行插入或删除操作的线性表表尾端…

java数据结构-栈

栈 1、栈的定义 栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 栈顶&#xff08;Top&#xff09;&#xff1a;线性表允许进行插入删除的那一端。 栈底…

数据结构栈(顺序栈、链栈、插入push、删除pop)、队(循环队,链队、入队push,出队pop)知识点梳理

数据结构栈知识点梳理 一 栈的定义 栈&#xff08;stack&#xff09;是限定仅在表尾进行插入和删除操作的线性表 不含任何元素的栈称为空栈 允许插入和删除的一端成为栈顶&#xff08;top&#xff09;&#xff0c;另一端称为栈底&#xff08;bottom&#xff09; 具有LIFO&a…

数据结构栈和队列

整本书的知识点&#xff0c;点击右方链接&#xff1a;整本书笔记知识点 文章目录 三、栈和队列3.1、栈和队列的定义和特点3.1.1、栈的定义和特点3.1.2、队列的定义和特点 3.2、案例引入3.3、栈的表示和操作的实现3.3.1、栈的类型定义3.3.2、顺序栈的表示和实现3.3.3、链栈的表示…

C++数据结构——栈

C数据结构——栈 最近计划再复习一遍数据结构&#xff0c;看到一篇博客&#xff1a;https://www.cnblogs.com/QG-whz/p/5170418.html#_label0。 1、栈(Stack)是一种线性存储结构&#xff0c;它具有如下特点&#xff1a; &#xff08;1&#xff09;栈中的数据元素遵守“先进后…

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

目录 一.栈的定义二.栈的特点三.栈的理解四.链栈引入五.链栈定义六.链栈的结构体设计七.链栈的基本操作7.1链栈的初始化7.2链栈判空7.3链栈入栈7.4链栈出栈7.4取栈顶元素 八.总结 一.栈的定义 栈是限定仅在表尾进行插入和删除操作的数据结构&#xff08;受到限制的线性表&…

数据结构之——栈

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

数据结构与算法(3)栈

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

【数据结构】栈

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

什么是栈?

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

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

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

数据结构——栈

栈和队列 栈和队列介绍特点栈、队列与一般线性表的区别栈——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…