【数据结构】--栈

👌个人主页: 起名字真南
🤣个人专栏:【数据结构初阶】 【C语言】

请添加图片描述

目录

  • 1 栈
    • 1.1 栈的概念和结构
    • 1.2 栈的实现
      • 1.2.1 头文件
      • 1.2.2 初始化
      • 1.2.3 销毁
      • 1.2.4 打印所有元素
      • 1.2.5 入栈
      • 1.2.6 出栈
      • 1.2.7 获取栈顶数据
      • 1.2.8 判空
      • 1.2.9 获取元素个数

1 栈

1.1 栈的概念和结构

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除操作,进行数据插入和删除的一端叫做栈顶,另一端叫做栈底。栈中的数据元素遵循后进先出LIFO(Last In First Out)的原则。

压栈:栈的插入操作叫做压栈/ 进栈。
出栈:栈的删除操作叫做出栈。
不管是压栈还是出栈都在栈顶

在这里插入图片描述

1.2 栈的实现

栈的实现一般可以用数组或者链表进行实现,但相对而言使用数组的结构实现更优越些,因为数组在尾插数据比较方便。

1.2.1 头文件

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>typedef int StackDataType;typedef struct Stack
{StackDataType* arr;  int top;  //记录栈顶的数据int capacity; //记录空间的大小}Stack;//初始化
void StackInit(Stack* ST);//销毁
void StackDestroy(Stack* ST);//打印数据
void StackPrint(Stack ST);//插入数据
void StackPush(Stack* ST, StackDataType data);//删除数据
void StackPop(Stack* ST, StackDataType data);//取栈顶数据
StackDataType StackTop(Stack* ST);//判空
bool StackEmpty(Stack* ST);//获取数据个数
int STSize(Stack* pst);

1.2.2 初始化

我们可以看到栈的初始化和顺序表的初始化基本一致。所以这次我们在初始化的时候给定capacity = 4,因为初始有空间所以在给数组初始化的时候要开辟空间,使用malloc,然后定义top来记录栈顶的数据。


void StackInit(Stack* ST)
{assert(ST);ST->arr = (StackDataType*)malloc(4 * sizeof(StackDataType));ST->capacity = 4;ST->top = 0;
}

1.2.3 销毁

因为数组是一串连续的空间所以直接释放首元素地址即可。

void StackDestroy(Stack* ST)
{free(ST->arr);ST->arr = NULL;ST->capacity = ST->top = 0;
}

1.2.4 打印所有元素

因为通过top来记录栈顶元素的原理是top作为访问栈顶元素的指针(地址)所以我们也可以根基top的大小来记录元素的数量。因为这里传的参数是结构体所以结构体的调用使用 ”.“

void StackPrint(Stack ST)
{assert(ST.arr);for (int i = 0; i < ST.top; i++){printf("%d ", ST.arr[i]);}printf("\n");
}

1.2.5 入栈

入栈我们首先要判断空间的大小是否满了,因为top也记录着元素的数量所以直接比较即可由于在初始化的时候我们分配的空间,所以如果相等的化只有一种情况就是满了,所以我们需要对他进行扩容。

void StackPush(Stack* ST, StackDataType data)
{assert(ST);if (ST->top == ST->capacity){StackDataType* tmp = realloc(ST->arr, 2 * sizeof(ST->arr));if (tmp == NULL){perror("realloc:");}ST->arr = tmp;ST->capacity = 2 * (ST->capacity);}ST->arr[ST->top++] = data;ST->capacity++;
}

1.2.6 出栈

出栈和顺序表的尾删同理。

void StackPop(Stack* ST, StackDataType data)
{assert(ST);ST->top--;
}

1.2.7 获取栈顶数据

需要注意的是在构造函数的时候,函数的返回值类型,还有top-1记录的是栈顶的数据而top记录的是元素的个数,因为是从0开始所以相差了1.

StackDataType StackTop(Stack* ST)
{assert(ST);return ST->arr[ST->top - 1];
}

1.2.8 判空

判空的时候我们需要用到bool类型所以需要包含对应的头文件,如果ST->top == 0 成立则返回 True 否则返回False。

#include<stdbool.h>
bool StackEmpty(Stack* ST)
{assert(ST->arr);return ST->top == 0;
}

1.2.9 获取元素个数

这个也只是需要注意返回值类型为int

int STSize(Stack* pst)
{assert(pst);return pst->top;
}

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

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

相关文章

spring mvc实现一个自定义Formatter请求参数格式化

使用场景 在Spring Boot应用中&#xff0c;Formatter接口用于自定义数据的格式化&#xff0c;比如将日期对象格式化为字符串&#xff0c;或者将字符串解析回日期对象。这在处理HTTP请求和响应时特别有用&#xff0c;尤其是在展示给用户或从用户接收特定格式的数据时。下面通过…

四、golang基础之defer

文章目录 一、定义二、作用三、结果四、recover错误拦截 一、定义 defer语句被用于预定对一个函数的调用。可以把这类被defer语句调用的函数称为延迟函数。 二、作用 释放占用的资源捕捉处理异常输出日志 三、结果 如果一个函数中有多个defer语句&#xff0c;它们会以LIFO…

昇思MindSpore学习入门-函数式自动微分

函数式自动微分 神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff08;logits&#xff09;与正确标签&#xff08;label&#xff09;送入损失函数&#xff08;loss function&#xff09;获得loss&#xff0c;然后进行反向传播计算&#xff0c;求得梯度&#…

[单机版]新天龙八部之14门派绝情谷版|Win一键端+GM工具

前言 今天给大家带来一款单机游戏的架设&#xff1a;新天龙八部之14门派绝情谷版一键端紫色穿刺 无字谱&#xff0c;金陵天外。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; [单机版]新天龙八部之…

数据结构-分析期末选择题考点(广义表)

莫道桑榆晚 为霞尚满天 数据结构-图期末选择题 数据结构-串、数组选择题 数据结构-排序选择题 数据结构-线性表、栈、队列、二叉树合集 契子✨ 广义表&#xff1a; <1>考点一&#xff1a;基本概念 广义表的基础概念 &#xff08;1&#xff09;什么是广义表 广义表&#…

google编码规范

7. 命名约定 — Google 开源项目风格指南

分词算法的基本原理及应用

分词算法的基本原理及应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨分词算法&#xff0c;这是自然语言处理领域中非常重要的技术之一&…

Hadoop 部署

1 准备工作 准备好集群环境 详情参考博客&#xff1a;集群初始配置。安装 Java 输入javac可查看安装提示信息。使用命令sudo apt install openjdk-8-jdk-headless安装JDK配置环境变量。使用sudo vim /etc/profile打开profile文件&#xff0c;输入以下内容&#xff0c;保存并退…

53、基于竞争层的竞争学习(matlab)

1、基于竞争层的竞争学习简介及原理 竞争学习是一种无监督学习方法&#xff0c;其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络&#xff08;Competitive Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;其核心部分是…

Docker使用daocloud镜像加速

之前给大家分享的阿里云的镜像加速&#xff0c;今天再给大家分享一个还可以使用的镜像加速地址daocloud。 经过测试速度还是比较快的。 [rootbogon ~]# cat /etc/docker/daemon.json {"registry-mirrors": ["https://docker.m.daocloud.io"] }[rootbogon…

运营商、银行、国企等单位开发岗24届Offer薪资与福利汇总

本文介绍24届校园招聘中&#xff0c;地理信息科学&#xff08;GIS&#xff09;专业硕士研究生所得Offer的整体薪资情况、福利待遇等。 在2024届秋招与春招中&#xff0c;我累计投递了170余个单位&#xff0c;获得17个Offer&#xff1b;平均每投递10个简历才能获得1个Offer。说句…

flink-触发器Trigger和移除器Evictor

窗口原理与机制 图片链接&#xff1a;https://blog.csdn.net/qq_35590459/article/details/132177154 数据流进入算子前&#xff0c;被提交给WindowAssigner&#xff0c;决定元素被放到哪个或哪些窗口&#xff0c;同时可能会创建新窗口或者合并旧的窗口。每一个窗口都拥有一个…

Pc端多功能视频混剪工具/便携版打开即用

PC便携版 视频批量剪辑大师&#xff0c;全自动剪辑神器&#xff0c;会打字就能做视频 多功能&#xff0c;视频混剪&#xff0c;视频配音&#xff0c;文字生成语音&#xff0c;图片合成视频&#xff0c;自动识别音频并生成字幕等功能 链接&#xff1a;https://pan.baidu.com/…

递归算法~快速排序、归并排序

递归排序是一种基于分治法的排序算法&#xff0c;最典型的例子就是快速排序和归并排序。这两种算法都利用递归将问题分解成更小的子问题&#xff0c;然后将子问题的解合并以得到原始问题的解。 1、快速排序&#xff08;Quick Sort&#xff09; 快速排序的基本思想是选择一个基…

文件操作与管理

程序经常需要访问文件和目录&#xff0c;读取文件信息或写入文件信息&#xff0c;在Python语言中对文件的读写是通过文件对象&#xff08;file object&#xff09;实现的。Python的文件对象也称为类似文件对象或流&#xff08;stream&#xff09;&#xff0c;因为Python提供一种…

springboot笔记示例七:mybiteplus框架mysql8新类型json集成

springboot笔记示例七&#xff1a;mysql8新类型json集成 ###本文md文件下载地址 https://download.csdn.net/download/a254939392/89492142md文件下载 建表SQL CREATE TABLE my_test (id int unsigned NOT NULL AUTO_INCREMENT,txt json DEFAULT NULL,txt_array json DEFAU…

<电力行业> - 《第9课:输电(二)》

4 输送电能流程 输送电能总共有&#xff1a;发电站→升压变压器→高压输电线→降压变压器→用电单位等五个流程。 电力工业初期&#xff0c;发电厂建在电力用户附近&#xff0c;直接向用户送电&#xff0c;所以那个时候只有发电和用电两个环节。 随着电力生产规模和负荷中心规…

烧结刚玉砂轮片 磨具用晶谷低温陶瓷结合剂玻璃粉

晶谷CBN 砂轮磨具用低温陶瓷结合剂玻璃粉的一些特点如下&#xff1a; - 软化点&#xff1a;通常为450~650度&#xff1b; - 膨胀系数&#xff1a;50~12010-7&#xff1b; - 粒径&#xff1a;300~3000目&#xff08;可按要求订做&#xff09;&#xff1b; - 外观颜色&#xff…

h5兼容table ,如何实现h5在app内使用h5渲染table表格而且实现横屏预览?

压图地址 横屏div 通过css 实现 transform: rotate(90deg); transformOrigin: 50vw 50vw ; height: 100vw; width: 100vh;<divclass"popup-box":style"{transform: originSet 0 ? rotate(90deg) : ,transformOrigin: originSet 0 ? 50vw 50vw : ,height…

GuLi商城-商品服务-API-三级分类-删除-逻辑删除

注意&#xff1a;官方文档说logic配置可以省略&#xff0c;代码中直观些&#xff0c;配上吧 逻辑删除注解&#xff1a; 实体类字段上加逻辑删除注解&#xff1a; 启动nacos&#xff1a; 启动商品服务&#xff1a; postman测试&#xff1a; 数据库字段值改成了0&#xff0c;说明…