数据结构与算法3—栈

news2024/11/23 19:18:44

1. 栈的定义

  • 栈,也叫堆栈,是最常用也是最重要的数据结构之一。
  • 栈(Stack)是限定仅在表的一端进行插入或删除操作的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。
  • 栈操作的特点:后进先出,先进后出。
  • 因此,栈称为后进先出表(LIFO, Last In First Out)。

示意图:

2. 栈的基本运算

  • 初始化栈InitStack(*S)
  • 压栈Push(*S,x)    ——在栈顶插入元素
  • 出栈Pop(*S,x)    ——在栈顶删除元素
  • 取栈顶元素GetTop(S,x)
  • 判栈空Empty(S)

栈的几种状态(最大长度MaxSize为4):栈空、压栈、栈满、出栈

3. 栈的存储结构

栈有两种表示方法:顺序存储链式存储

3.1 顺序栈

采用顺序存储结构的栈简称为顺序栈。是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设整型变量top指示栈顶元素在顺序栈中的位置。

// 顺序栈数据类型的C语言描述如下:
#define MaxSize 100
typedef int DataType;
typedef struct {
          DataType data[MaxSize];
          int top;
}Stack;

// top:栈顶指针。取值范围为0~MaxSize-1。
// top==-1表示栈空,top==MaxSize-1表示栈满。 
// 初始化栈InitStack(S)
 int InitStack(Stack *S) 
 { 
     S->top=-1; 
     return 1;
 } 

// 压栈Push(S,x)
int Push(Stack *S,DataType x)
{
    if(S->top==MaxSize-1)
    {
         printf("\n Stack is full!"); 
        return 0;
    }
      S->top++;
      S->data[S->top]=x;
      return 1; 
}

// 判栈空EmptyStack(S)
int EmptyStack(Stack *S)
{ 
    return (S->top==-1?1:0);
}

// 出栈Pop(S,x)
int Pop(Stack *S,DataType *x)     
{ 
    if(EmptyStack(S))
    {   
          printf("\n Stack is free!"); 
           return 0;
    }
   *x=S->data[S->top];//记住要删除的元素值
       S->top--;
       return 1;
}

// 取栈顶元素GetTopStack(S)
DataType GetTop(STACK *S)   
{  
    DataType x;
    if(EmptyStack(S))
    {   
          printf("\n Stack is free!"); 
        exit(1);
    }
       x=S->data[S->top];
       return x;
}

3.1 链栈:栈的链式存储结构

链栈结构示意图:

top栈顶指针,惟一的确定一个链栈。 链栈通常带有一个表头结点,所以top->next才指示栈顶元素。

//  链栈的C语言描述如下:
typedef struct node
{
    ElemType data;
    struct node *next;
}Stack;

 

Stack * InitStack() 
{
    Stack *top;
    top=(Stack *)malloc(sizeof(Stack));
    top->next=NULL;
    return top;
}
//进栈
int Push(Stack *top,Pos x) 
{
    Stack *s;
    s=(Stack *)malloc(sizeof(Stack));
    if(!s) //当s==NULL return 0
        return 0;
    s->data=x; 
    s->next=top->next; //新申请空间的指针域保存上一个结点的地址
    top->next=s;  //头指针域保存新结点地址
    return 1;
}
//判断栈空
int EmptyStack(Stack *top) 
{
    if(top->next==NULL)
        return 1;
    else
        return 0;
}
//出栈
int Pop(Stack *top,Pos *e) 
{
    Stack *s;
    if(EmptyStack(top))
        return 0;
    s=top->next;  //取第一个结点的地址
    *e=s->data;   //返第一结点数据
    top->next=s->next; //头结点指针域存第二结点地址
    free(s);
    return 1;
}

//取栈顶元素
int GetTopStack(Stack *top,Pos *e)
{
    Stack *s;
    if(EmptyStack(top))
        return 0;
    s=top->next;
    *e=s->data;
    return 1;
}

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

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

相关文章

【服务器数据恢复】StorNext文件系统数据恢复案例

服务器数据恢复环境: 昆腾系列存储,9个磁盘柜,每个磁盘柜配置24块硬盘。其中8个磁盘柜用于存储数据,1个磁盘柜用于存储元数据。上层使用的是StorNext文件系统。 存储元数据的磁盘柜中24块磁盘的分配情况:8组RAID1阵列1…

1361. 验证二叉树

目录题目思路代码题目 二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。 只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。 如果节点…

开发小程序遇到的问题

1、小程序授权定位时报错 原因: 需要授权 scope.userLocation、scope.userLocationBackground 时必须配置地理位置用途说明。 解决: 在app.json中,根据开发文档的提示,将下面的代码添加在与pages同级下 "permission": {…

16年经验的通信行业测试人,后悔入错行了吗?

屏幕前的读者对于一个行业的兴衰有什么看法呢?非常很现实的说,我们所处的行业直接关系着每个人的收入,处于行业的不同生命周期内,我们拿到的钱也会不一样。下面用本人所处的行业举个例子。工作经历初入通信行业从我进入通信行业的…

什么是SPI?SPI的优点有哪些?

1、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写,是Motorola公司推出的一种同步串行接口技术,是一种高速、全双工、同步的通信总线。 2、SPI优点 支持全双工通信通信简单数据传输速率块 3、缺…

案例分析中可能的考点1:招投标程序

招投标程序: (1)投标方不满足资质要求; (2)投标过程不满足时间要求; (3)招标公告内容或过程不满足要求; (4)评标人员不满足组成要求&a…

【数据结构与算法】二叉树的非递归前中后序遍历

🌠作者:阿亮joy. 🎆专栏:《数据结构与算法要啸着学》 🎇座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉…

WebSphere8 批量安装和制作介质服务器

WAS 8.5 介质准备 1、安装install manager 2、安装IBM Packaging Utility unzip pu.offering.disk.linux_1.5.3000.20120531_2025.zip cd disk_linux/InstallerImage_linux ./consoleinst.sh 跟着向导安装。 3、安装PU mkdir pu cd pu unzip ../pu_1.5.3.zip ./imcl i…

如何使用集成在 SharePoint 中的开源 ONLYOFFICE 文档替代微软 Office

ONLYOFFICE 文档是一款开源的办公套件,在 GNU AGPL v3.0 下分发。它包括基于网络的查看器和协作编辑器,可用于处理文本文档、电子表格和演示文稿,与 OOXML 格式高度兼容。 ONLYOFFICE 文档可以与多种云服务集成,如 Nextcloud、ow…

仅CPU服务器pytorch ,torch_geometric安装配置

写在开头,做了整整三年的多组学数据分析,各种模式动物、组织、细胞系的各种组学数据,该怎么串联成我的论文?就是我要开启深度学习小白模式了。 万种流程先从环境配置开始,先说说环境,其实当家的有多GPU超大…

儿童护眼灯哪个好?四款儿童护眼台灯测评

儿童护眼灯在孩子的学习过程中起到了很重要的作用,53.7%的青少年们都有近视的现象,而好的台灯不仅照明非常柔和,而且对眼睛没有刺激和伤害,护眼灯相比传统电灯,一是古县更加明亮且可以调节,二是有护眼技术的…

HANA 的 calculation view出现模糊关联 ambiguous join

一旦我们用了join,那就会有个Analytic Engine分析引擎来确保不是唯一连接的时候,关键值不会被重复。 啥是模糊关联? 一般来讲关联基数是1:n, 或者n:1,或者 m:n都是。 以上两个关联,结果集如下: 这时候&a…

php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07

php学习笔记-php会话控制及web常用的预定义变量-day071、$_REQUEST2、$_SERVER3、$_COOKIE3.1 cookie的内容3.2 cookie的分类3.3 php中cookie的使用3.4 cookie自动登录小demo4、$SESSION4.1 session的工作原理4.2 session的使用4.2.1 修改php.ini中的session配置4.2.2 开启sess…

Android 深入系统完全讲解(13)

3 编译过程讲解 1 系统的编译过程 Android 的编译使用的 Makefile,推荐大家使用《GNU make 中文手册》,这本书有电子版,非常方便,主要是要理解清楚 Makefile 的规则,编译策略,可以通过写简单的编译机制&am…

【Java项目推荐】值得写到简历上的项目--黑马点评

优惠卷秒杀前言优惠券秒杀实现优惠券秒杀下单超卖问题一人一单分布式锁redis中加锁的一些特殊情况手动实现分布式锁分布式锁误删情况1分布式锁误删情况2lua脚本解决多条命令的原子性问题Redisson秒杀优化异步秒杀思路基于redis完成秒杀资格判断基于阻塞队列实现异步下单总结Red…

70、SSDNeRF: Semantic Soft Decomposition of Neural Radiance Fields

简介 官网:https://www.siddhantranade.com/research/2022/12/06/SSDNeRF-Semantic-Soft-Decomposition-of-Neural-Radiance-Fields.html SSDNeRF,将语义信号与场景的辐射信号联合编码,提供了场景的软分解为语义部分,能够正确编码…

【HCIA-openEuler】实验手册—09【openEuler综合实践】

文章目录一、实验介绍1、关于本实验2、实验目的二、实验任务配置1、配置思路2、配置步骤步骤1:挂载系统ISO,并配置好本地dnf源步骤2:配置软件安装源步骤3:安装文件共享服务三、设置文件共享用户与权限1、实验介绍(1&am…

【Linux】编辑器 - vim 的使用与配置

目录 1、vim的基本概念 2、vim的基本操作 2.1、vim 编辑器的进入与退出 2.2、插入模式 2.3、命令模式 2.4、底行模式 3、vim的配置 3.1、自定义配置 3.2、自动化配置 vim 的前身是 vi,vi/vim的区别简单点来说,它们都是多模式编辑器,…

Java对时间的处理

Date用的最多这里主要介绍该类。java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 package com.company; import java.util.Date;public class Main {public static void main(String[] args) {// write your code hereSyste…

阿里云Docker仓库操作

为什么用阿里云docker有自己的仓库服务器,但是对没掏钱的(白嫖)用户并不是那么友好,有两个很大的限制:免费用户,在6个月之内如果没有任何操作,将会被自动删除,真的很糟糕啊。匿名用户…