数据结构:栈的创建与使用

今天我们一起来看一种新的数据结构栈,其实这一种结构我们在之前就已经使用过,只是今天我们来强调以下几点:

1、栈是一种数据后进先出的结构 ,通过入栈1 2 3 4我们可以得到多种结果

2、我们选用顺序表来实现栈结构,这里我们堆顺序表可能造成的空间浪费可以忽略不记

 

下面是栈的结构体的书写:本质上还是顺序表,只是这里我们使用top来指向栈顶空间 

下面是实现栈空间的核心函数:主要涉及插入和删除,插入我们只能从尾部插入,删除也是尾部删除,因为是后进先出。这里我们多出一个返回栈顶函数。 对于栈,我们不能写遍历函数,因为我们访问栈的元素只能从尾部访问,访问后要将它删除,也就是从栈的顶部出去,其中STEmpty函数是用来判断栈是否为空。

对于初始化函数:我们可以将top设置为0或-1,区别在于指向元素的位置不一样 

对于销毁函数:与顺序表一致

 对于插入函数:与顺序表一致

 对于判断函数是否为空函数:pst->top为0就返回真

对于返回栈顶元素:这里我们要断言,要求pst和顺序表不为空

最后我们再次强调我们不能写遍历打印函数,因为这样写栈就失去了意义

 希望本期内容对大家有所帮助!!!

下面是完整的代码

void InitST(ST* pst)
{
	assert(pst);
	pst->data = NULL;
	pst->capcity = 0;
	pst->top = 0;
}

void STPush(ST* pst, Datatype x)
{
	assert(pst);
	Datatype NewCapcity = 0 == pst->capcity ? 4 : pst->capcity * 2;
	ST* ptr = (ST*)realloc(pst->data, NewCapcity * sizeof(Datatype));
	if (ptr == NULL)
	{
		perror("realloc_fail");
		return;
	}
	else
	{
		pst->data = ptr;
	}
	pst->capcity = NewCapcity;
	pst->data[pst->top] = x;
	pst->top++;
}
bool STEmpty(ST* pst)
{
	assert(pst);
	return pst->top == 0;
}
void STPop(ST* pst)
{
	assert(pst);
	assert(!STEmpty(pst));//目的是让top不为空,为空就会报错
	pst->top--;
}
Datatype STTop(ST* pst)
{
	assert(pst);
	assert(!STEmpty(pst));
	return pst->data[pst->top - 1];

}
void DestroyST(ST* pst)
{
	free(pst->data); 
	pst->data = NULL;
	pst->capcity = 0;
	pst->top = 0;
}
int STsize(ST* pst)
{
	assert(pst);
	return pst->top;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科技回顾,飞凌嵌入式受邀亮相第八届瑞芯微开发者大会「RKDC2024」

2024年3月7日~8日,第八届瑞芯微开发者大会(RKDC2024)在福州举行,本届大会以“AI芯片AI应用AloT”为主题,邀请各行业的开发者共启数智化未来。 本届大会亮点颇多,不仅有13大芯片应用展示、9场产品和技术论坛…

软考高级:设计模式分类(创建型、结构型、行为型)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Linux之防火墙详解

华子目录 什么时防火墙分类Netfilter(数据包过滤)定义Netfilter分析内容 防火墙无法完成的任务iptables与firewalld区别iptablesiptables执行原则原则防火墙规则规则链概念分析规则链分类注意例:物业管理公司有两条规定: 规则链之…

作用域链的理解(超级详细)

文章目录 一、作用域全局作用域函数作用域块级作用域 二、词法作用域三、作用域链 一、作用域 作用域,即变量(变量作用域又称上下文)和函数生效(能被访问)的区域或集合 换句话说,作用域决定了代码区块中变…

C++初学

1>思维导图 2>试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream> #include<string.h> using namespace std;int main() {string str;cout <<…

C++14之std::index_sequence和std::make_index_sequence

相关文章系列 std::apply源码分析 C之std::tuple(一) : 使用精讲(全) 目录 1.std::integer_sequence 2.std::index_sequence 3.std::make_index_sequence 4.运用 4.1.打印序列的值 4.2.编译时求值 4.3.std::tuple访问值 5.总结 1.std::integer_sequence 运行时定义一个…

Linux:进程

进程 知识铺垫冯诺依曼体系结构操作系统&#xff08;OS&#xff09; 进程概念进程的查看ps 命令获取进程 pid文件内查看进程终止进程的方式kill命令快捷键 进程的创建 forkfork 返回值问题 进程状态运行状态 &#xff1a;R休眠状态&#xff1a;S &#xff08;可中断&#xff09…

【3GPP】【核心网】【5G】5G核心网组网方案(超详细)

5G NR RRC协议总体介绍 UE入网过程包括几个子过程&#xff1a; UE分为三种状态&#xff1a;空闲态&#xff0c;连接态和非活动态。 开机入网流程 小区搜索与选择 UE开机选网&#xff0c;小区搜索并完成下行同步。 系统消息广播 UE读取广播信息&#x…

VMD + CEEMDAN 二次分解,CNN-LSTM预测模型

目录 往期精彩内容&#xff1a; 前言 1 二次分解与数据集制作 1.1 导入数据 1.2 VMD分解 1.3 样本熵 1.4 CEEMDAN分解 1.5 数据集制作 2 基于Pytorch的 CNN-LSTM 预测模型 2.1 定义CNN-LSTM预测模型 2.2 设置参数&#xff0c;训练模型 3 模型评估与可视化 3.1 结果…

学习JavaEE的日子 Day26 手撕所有集合类底层源码

Day26 1.手撕ArrayList底层源码 思路&#xff1a; 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程 public class Test01 { public static void main(String[] args) {//ArrayList<String> list new ArrayList<>();…

【Java从发入门到精通】Java StringBuffer 和 StringBuilder 类

Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候&#xff0c;需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是&#xff0c;StringBuffer 和 StringBuilder 类的对象能够被多次的修改&#xff0c;并且不产生新的未使用对象。 在使用 Stri…

在线安装MySQL5.7

在线安装MySQL 安装MySQL5.7 yum -y install mysql57-community-release-el7-10.noarch.rpm 若无可用安装包&#xff0c;执行下面这句 wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm 本地安装 yum localinstall -y mysql57-community-releas…

Head First Design Patterns - 命令模式

什么是命令模式 命令模式&#xff0c;把请求封装成对象&#xff0c;以便使用不同的请求、队列或者日志请求来参数化其他对象&#xff0c;并支持可撤回的操作。 为什么会有命令模式 假设要设置一个遥控器&#xff0c;遥控器需要控制多个设备&#xff0c;每个设备除了开关&#…

MS30517SA单通道、高速、低侧栅极驱动器

产品简述 MS30517SA 是单通道、高速、低侧栅极驱 动器器件&#xff0c;能够有效地驱动 MOSFET 和 IGBT 开 关 。 芯片的 设 计 能 够 大 大 减 少 击 穿 电 流 &#xff0c; MS30517SA 能够提供高峰值拉、灌电流脉冲&#xff0c; 同时提供了轨到轨驱动能力以及低传播…

C break 语句

C 语言中 break 语句有以下两种用法&#xff1a; 当 break 语句出现在一个循环内时&#xff0c;循环会立即终止&#xff0c;且程序流将继续执行紧接着循环的下一条语句。它可用于终止 switch 语句中的一个 case。 如果您使用的是嵌套循环&#xff08;即一个循环内嵌套另一个循…

自动驾驶---Motion Planning之构建SLT Driving Corridor

1 背景 在上篇博客《自动驾驶---Motion Planning之Speed Boundary》中,主要介绍了Apollo中Speed Boundary的一些内容,可以构造ST图得到边界信息,最后结合粗糙的速度曲线和路径曲线,即可使用优化的方法求解得到最终的轨迹信息(s,s,s,l,l,l)。 本篇博客笔者主要介绍近…

Matlab 字符串相关命令

参考 字符串命令汇总1

代码随想录算法训练营第四十一天|卡码网46. 携带研究材料(第六期模拟笔试)、416. 分割等和子集

卡码网46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; 刷题https://kamacoder.com/problempage.php?pid1046 题解&#xff1a; 一维背包 文章讲解https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-2.html…

js导出的excel文件无法打开/打开乱码,excel无法打开xxx.xlsx因为文件格式或文件扩展无效

excel无法打开xxx.xlsx因为文件格式或文件扩展无效 使用 a 标签导出这里就不细说了&#xff0c;直接说上述问题解决方案 在调用导出接口的时候加上两个参数 responseType: “blob” responseEncoding: “utf8” export function test(data) {return util({url: /test,method: …

制冷系统管道焊接气焊安全操作

气焊操作安全教育&#xff1a; 1、检查气焊用具完好牢固无损&#xff0c;不得贴粘有&#xff08;机油&#xff09;&#xff1b; 2、气瓶余压&#xff08;2KG&#xff09;停止使用&#xff1b;清除动火 10 米范围内易燃易爆物料&#xff1b; 3、库房内动火要 做好通风排气&…