首页 > 其他分享 >详解数据结构中栈的定义和操作

详解数据结构中栈的定义和操作

时间:2023-04-20 15:22:29浏览次数:52  
标签:return SqStack top 元素 栈顶 中栈 详解 操作 数据结构

摘要:本文为大家详解数据结构中栈的定义和操作。

本文分享自华为云社区《数据结构:详细讲解栈的定义、栈的操作》,作者: 高彬滔 。

1.栈的定义

栈(stack):是只允许在一端进行插入或者删除操作的线性表(即后进先出,大概可以理解为吃饱了吐出来)

  • 空栈:不含元素的空标配
  • 栈顶:表尾端
  • 栈底:表头端
  • 进栈顺序:a1->a2->a3->a4->a5
  • 出栈顺序:a5->a4-a3->a2->a1

2.对比线性表和栈基本操作

2.1 线性表的基本操作

  • InitList(&L):初始化表。构造一个空的线性表L,分配内存空间
  • DestoryList(&L):销毁操作。销毁线性表,并且释放线性表L所占用的空间
  • ListInsert(&L,i,e):插入操作,在表L中的第i个位置上插入指定元素e
  • ListDelete(&L,i,e):删除操作,删除表L中的第i个位置的元素,并且用e返回删除元素的值
  • LocateElem(L,e):按值查找操作,在表L中查找具有给定关键字值的元素
  • GetElem(L,i):按位查找操作,获取表L中第i个位置的元素的值

2.2 栈的基本操作

  • InitStack(&S):初始化栈,构造一个空栈S,分配内存空间
  • DestoryStack(&S):销毁栈,销毁并释放栈S所占用的内存空间
  • Push(&S,x):进栈,若栈S未满,则将x加入使之成为新的栈顶
  • Pop(&S,&x):出栈,若栈S非空,则弹出栈顶元素,并用x返回
  • GetTop(S,&x):读栈顶元素,若栈S非空,则用x返回栈顶元素

其他常见操作: StackEmpty(S):判断一个栈S是否为空,若S为空,则返回true,否则返回false

3.顺序栈

3.1顺序栈的定义

#define MaxSize 10           //定义栈中元素的最大个数 
typedef struct{
 ElemType data[MaxSize];   //静态数组存放栈中的元素
    int top;      //栈顶指针
}SqStack;         //结构体重命名

声明一个顺序栈后就会在内存中分配一整片连续的空间,其中内存大小为:MaxSize*sizeof(ELemType)

void testStack(){
 SqStack S; //声明一个顺序栈
}

3.2栈的初始化操作

由于栈顶指针top需要指向此时栈顶元素,所以让top指向0是不合理的,可以初始化让top指向-1;判断一个栈是否为空,即判断S.top是否等于-1

初始化栈:

void Inittack(SqStack){
 SqStack S;   //声明一个顺序栈
 S.top=-1;
}

判断栈空:

bool StackEmpty(SqStack S){
    if(S.top==-1)      //栈空
        return true;
    else 
        return false;  //非空
}

3.3进栈操作

分析:

  1. 判断栈是否为空
  2. 栈顶指针+1
  3. 新元素入栈
bool Push(SqStack &S,ElemType x){
 if(S.top==NaxSize-1)
        return false;
 S.top+=1;
 S.data[S.top]=x;
        return true;
}

3.4出栈操作

bool Push(SqStack &S,ElemType &x){
 if(S.top==-1)
        return false;
    x=S.data[S.top--];
        return true;
}

3.5读栈顶元素操作

bool GetTop(SqStack &S,ElemType &x){
 if(S.top==-1)
        return false;
    x=S.data[S.top];
        return true;
}

4.共享栈

两个栈共享同一片空间

#define MaxSize 10           //定义栈中元素的最大个数 
typedef struct{
 ElemType data[MaxSize];   //静态数组存放栈中的元素
    int top0;     //0号栈栈顶指针
    int top1;     //1号栈栈顶指针
}SqStack;         //结构体重命名
初始化栈:
void InitStack(ShStack &S){
 S.top0=-1;
 S.top1=MaxSize;
}

5.链栈的定义

  • 进栈/出栈都只能在栈顶一段进行
  • 链头作为栈顶
typedef struct Linknode{
 ElemType data;           //数据域
    struct Linknode *next;   //指针域
}*LiStack                    //栈类型定义

 

点击关注,第一时间了解华为云新鲜技术~

标签:return,SqStack,top,元素,栈顶,中栈,详解,操作,数据结构
From: https://www.cnblogs.com/huaweiyun/p/17337002.html

相关文章

  • 操作符详解
    算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用,函数调用和结构成员1.算数操作符 +  -  *  /   %2.移位操作符 >>右移   <<左移右移操作符,移动的是二进制位右移操作符:1.算术右移2.逻辑右移算术右移:右边......
  • 09-内置对象扩展:Set数据结构
    title:09-内置对象扩展:Set数据结构publish:trueSet数据结构Set数据结构的介绍ES6提供了新的数据结构Set。Set类似于数组,但成员的值都是唯一的,没有重复的值。Set的应用有很多。比如,在H5页面的搜索功能里,用户可能会多次搜索重复的关键字;但是在数据存储上,不需要存......
  • docker安装及优化详解
      一、docker安装步骤详解docker初期版本是1.13(同一版本,开源)——》分类型1.15-1.17过程中分成两种。①开源社区docker-ce②企业版docker-ee目前Docker只能支持64位系统。​1.#关闭防火墙systemctlstopfirewalld.servicesetenforce0​2.#安装依赖包yum......
  • Python常用数据结构之元组
    前面的两节课,我们为大家讲解了Python中的列表,它是一种容器型的数据类型,通过列表类型的变量,我们可以保存多个数据并通过循环实现对数据的批量操作。当然,Python中还有其他容器型的数据类型,接下来我们就为大家讲解另一种容器型的数据类型,Python常用数据结构之元组(tuple)。元组的定义......
  • 11-CSS3属性详解(一)
    title:11-CSS3属性详解(一)publish:true前言我们在上一篇文章中学习了CSS3的选择器,本文来学一下CSS3的一些属性。本文主要内容:文本盒模型中的box-sizing属性处理兼容性问题:私有前缀边框背景属性渐变文本text-shadow:设置文本的阴影格式举例: text-s......
  • 12-CSS3属性详解:动画详解
    title:12-CSS3属性详解:动画详解publish:true前言本文主要内容:过渡:transition2D转换transform3D转换transform动画:animation过渡:transitiontransition的中文含义是过渡。过渡是CSS3中具有颠覆性的一个特征,可以实现元素不同状态间的平滑过渡(补间动画),经常......
  • 13-CSS3属性:Flex布局图文详解
    title:13-CSS3属性:Flex布局图文详解publish:true前言CSS3中的flex属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强。其强大的伸缩性和自适应性,在网页开中可以发挥极大的作用。flex初体验我们先来看看下面这个最简单的布局:......
  • 14-CSS3属性详解:Web字体
    title:14-CSS3属性详解:Web字体publish:true前言开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。支持程度比较好,甚至IE低版本的浏览器也能支持。字体的常见格......
  • 07-html标签图文详解(二)
    title:07-HTML标签图文详解(二)本文主要内容列表标签:<ul>、<ol>、<dl>表格标签:<table>框架标签及内嵌框架<iframe>表单标签:<form>多媒体标签滚动字幕标签:<marquee>列表标签列表标签分为三种。1、无序列表<ul>,无序列表中的每一项是<li>英文单词解释如下:ul:unordered......
  • 08-HTML5详解
    title:08-HTML5详解publish:trueHTML5的介绍Web技术发展时间线1991HTML1994HTML21996CSS1+JavaScript1997HTML41998CSS22000XHTML1(严格的html)2002TablelessWebDesign(表格布局)2005AJAX2009HTML52014HTML5Finalized2002年......