当前位置: 首页 > news >正文

24.8.5数据结构|栈

栈-弹夹

1、定义:

栈就是特殊的线性表,与之前的线性表的区别就是增加了约束,只允许在一端插入和删除,就这麽简单。

2、基本操作

栈的插入操作叫:入栈{进栈、压栈};栈的删除:出栈{退栈,弹栈}

课本要求:

0、定义结构

//定义结构
#define Maxsize 100;//存储空间的初始分配量 
typedef int Element;
typedef struct{int top;Element *date;int size; 	
}StackList; //#define Maxsize 100
//typedef int Element;
//typedef struct{
//	int top;
//	Element date[Ma];	 	
//}StackList; 

1、初始化initstack:作用是初始化一个空战

2、求栈长getlen(S):返回站的元素个数

3、取栈顶元素gettop(S,x):通过x带回栈S的栈顶元素的值

4、入栈操作push(S,x),将x元素压入到站s中,使x成为新的栈顶元素

5、出栈操作pop(S,x):将非空栈的栈顶元素删除

6、判栈空操作emptystack(S),为空,返回1,否则返回0.

7、输出栈操作showlist(S):以此输出栈S中的所有元素

3、理解

基本概念

1、栈顶指针(top):记录当前栈顶的位置(下标或指针),元素的个数,站的长度

2、课本默认,空栈递减,栈顶指针初始化为0.【使用了0为栈空标记可以理解为赋值再++

3、所以,满递增栈【使用-1作为栈空标志】可以理解为直接top++再赋值

 

1、栈顶指针初始化为0或-1的区别: 
感谢我AI哥:
栈顶指针初始化为0或-1的区别
栈顶指针是用来指示栈中当前顶部元素位置的变量。在不同的编程实践中,栈顶指针的初始化值可以是0或-1,这两种做法反映了不同的设计哲学和操作习惯。栈顶指针初始化为-1
设计哲学:当栈顶指针初始化为-1时,它表示栈是空的,因为在数组中,-1不是一个有效的索引值。这样,当栈为空时,栈顶指针指向的是一个非法的位置,从而直观地表达了“没有元素在栈中”的状态。
操作习惯:在压栈操作(push operation)中,首先将栈顶指针加1,然后将新元素放入栈顶指针所指向的位置。在出栈操作(pop operation)中,首先取得栈顶元素的值,然后将栈顶指针减1。这种做法在逻辑上类似于“先预留空位,再放置元素”。栈顶指针初始化为0
设计哲学:当栈顶指针初始化为0时,它表示栈的底部,因为在数组中,0是第一个有效的索引值。这样,当栈为空时,栈顶指针正好位于栈底,表示栈中没有元素。
操作习惯:在压栈操作中,首先将新元素放入栈顶指针所指向的位置,然后栈顶指针加1。在出栈操作中,首先将栈顶指针减1,然后取得栈顶元素的值。这种做法在逻辑上类似于“先放置元素,再移动指针”。何时使用哪种初始化方式
选择栈顶指针初始化为-1还是0取决于个人偏好和具体应用场景。如果设计者倾向于直观地表达“空栈”的概念,并且喜欢在压栈前预留空位的操作方式,可能会选择初始化为-1。相反,如果设计者认为栈顶指针直接指向栈底更为直观,并且喜欢在压栈时直接放置元素的操作方式,可能会选择初始化为0。
2、realloc和malloc的区别

 

3、堆上提供长效空间,栈上生命周期短(临时使用)

顺序栈:固定大小

堆上维护接口

申请();

释放(Arraystack*stack);

满递增栈

入栈(,);

出栈();

#include<stdio.h>
#include<stdlib.h>//定义结构
#define Maxsize 100//存储空间的初始分配量 
typedef int Element;
typedef struct{int top;Element *date;int size;
}StackList; 
//第二种方法 
//#define Maxsize 100
//typedef int Element;
//typedef struct{
//	int top;
//	Element date[Ma];	 	
//}StackList; 
//都利用了数组 //初始化initstack:作用是初始化一个空战
void initstack(StackList*stack){stack->date=(Element*)malloc(sizeof(Element)*Maxsize);//这里给数据申请的空间 stack->top=0;//2、课本默认,空栈递减,栈顶指针初始化为0.【0为栈空标记】stack->size=Maxsize;}
//StackList*Createstack(StackList*stack) {
//	stack=(StackList*)malloc(sizeof(StackList)*Maxsize);
//	for(int i=0;i<Maxsize;i++){
//		stack->date[i]=0;
//	}
//	stack->top=-1;
//	return stack;
//}//2、求栈长getlen(S):返回站的元素个数
int getlen(StackList*list){return list->top;
}//3、取栈顶元素gettop(S,x):通过x带回栈S的栈顶元素的值
int  gettop(StackList*S,Element *x){//考虑栈空if(S->top==0)return 0;*x=S->date[S->top-1]; //为什么减一?取原来已经有的元素 return 1;
}// 4、入栈操作push(S,x),将x元素压入到站s中,使x成为新的栈顶元素
int  push(StackList*stack,Element x){//考虑栈满 ,栈满扩容 if(stack->top>=Maxsize) {stack->date=(Element*)realloc(stack->date,(Maxsize+1)*sizeof(Element));//ralloc的用法 if(!stack->date)return 0;//考虑空间分配不成功,返回0 stack->size++;} stack-> date[stack->top++]=x;return 1;
}
// 5、出栈操作pop(S,x):将非空栈的栈顶元素删除,存入指针e'所指向的内存单元 
int pop(StackList*stack,Element*x){//if(stack->top==0)return 0;*x=stack->date[--stack->top];return 1;
}//6、判栈空操作emptystack(S),为空,返回1,否则返回0.
int emptystack(StackList*stack){if(stack->top==0)return 1;return 0;
}
//7、输出栈操作showlist(S):以此输出栈S中的所有元素
void showLlist(StackList*stack){while(stack->top!=0){printf("%d",stack->date[--stack->top]);}
}

链式栈

相关文章:

24.8.5数据结构|栈

栈-弹夹 1、定义&#xff1a; 栈就是特殊的线性表&#xff0c;与之前的线性表的区别就是增加了约束&#xff0c;只允许在一端插入和删除&#xff0c;就这麽简单。 2、基本操作 栈的插入操作叫&#xff1a;入栈{进栈、压栈}&#xff1b;栈的删除&#xff1a;出栈{退栈&#x…...

LeetCode算法题训练

力扣刷题训练 开始记录力扣的刷题之路 刷题思路来自灵茶山艾府 入门题单&#xff1a; 「新」动计划 编程入门编程基础 0 到 1 训练方法 A 滑动窗口&#xff08;定长/不定长/多指针&#xff09;二分算法&#xff08;二分答案/最小化最大值/最大化最小值/第K小&#xff09…...

Python | Leetcode Python题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0...

手机CPU性能天梯图(2024年8月),含安兔兔/GB6/3DMark跑分

原文地址&#xff08;高清无水印原图/持续更新/含榜单出处链接&#xff09;&#xff1a; 2024年8月手机处理器天梯图 2024年8月1日更新日志&#xff1a;由于近期并未有新处理器发布&#xff0c;故只做常规更新&#xff1b;移除鲁大师天梯图&#xff1b;补充其它天梯图数量。 -…...

通过实际的例子和代码演示,可以更好地理解 `optional` 的使用方式和应用场景

当然&#xff0c;让我们通过一些实际的例子来演示 std::optional 的使用方式和应用场景。 场景 1&#xff1a;函数返回值 假设我们有一个函数&#xff0c;它尝试从字符串中解析一个整数&#xff0c;但如果字符串不是一个有效的整数&#xff0c;我们希望返回一个错误状态。 #…...

Java 电商秒杀系统优化实战:实现进阶示例详解与 RabbitMQ 配置

上一篇博客介绍了使用消息队列、异步处理等技术构建 Java 电商秒杀系统的基本思路&#xff0c;本文将进一步优化代码实现&#xff0c;并提供更详细的代码示例和 RabbitMQ 配置&#xff0c;助您构建更健壮、高效的秒杀系统。 一、 代码优化 1. 接口限流 在 SeckillController…...

路径规划 | 基于狼群算法的无人机路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 基于狼群算法的无人机路径规划&#xff08;Matlab&#xff09; 狼是一种群居性动物&#xff0c;社会分工明确&#xff0c;通过承担各自的责任与团结协作&#xff0c;共同促进整个狼群的生存与发展。狼群算…...

13-python函数返回值和装包的后续提取数据方法——解包

1.1 参数解包 不定长参数简单来讲就是装包&#xff0c;把多个参数装到一个元组或者装到字典中&#xff0c;就叫做装包 Ctrld可以快速向下复制 传递实参时&#xff0c;也可以在序列类型的参数前添加星号&#xff0c;这样他会自动将序列中的元素依次作为参数传递 注意&#x…...

I. 对线

https://codeforces.com/gym/103186/problem/I 一开始感觉操作挺复杂的 但是写过Chino的数列 - 洛谷 发现可以通过矩阵来实现swap操作&#xff0c;就想能不能用线段树维护矩阵来写 有三排兵线&#xff0c;我们维护区间和&#xff0c;因此初始矩阵就有了 接下来分析每个操作的…...

Topsis法模型(评价类问题)

目录 本文章内容参考&#xff1a; 一. 概念 二. 特点和适用范围 三. 实现步骤 四. 代码实现 本文章内容参考&#xff1a; TOPSIS法模型讲解(附matlab和python代码) 【数学建模快速入门】数模加油站 江北_哔哩哔哩_bilibili 一. 概念 TOPSIS&#xff08;Technique for O…...

HPA 与pod调度

HPA 自动更新工作负载资源&#xff08;例如 Deployment 或者 StatefulSet&#xff09;&#xff0c; 目的是自动扩缩工作负载以满足需求。 绑定到deploy上&#xff0c;控制pod 依托于metrics-server HorizontalPodAutoscaler 水平pod自动扩缩&#xff1a;意味着对增加的负…...

jupyter下载

https://blog.csdn.net/qq_48372575/article/details/125630622 我下面是CPU运行的&#xff0c;GPU链接在上面 Anaconda下载 https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 参考链接&#xff1a; https://blog.csdn.net/qq_48372575/article/detai…...

蓝桥杯双周赛 第 16 场 小白入门赛 解题报告 | 珂学家 | 七夕娱乐场

前言 题解 因为这场七夕节&#xff0c;所以出的特别友好。 整体还是偏思维。 T6 额外提供组合数学解&#xff0c;还是蛮有趣的。 A. 喜鹊罢工 题型: 签到 365 可以有多少个 7 组成 365可以有多少个7组成 365可以有多少个7组成 向上取整即可 #include <iostream>usi…...

[C++] 深入理解面向对象编程特性 : 继承

文章目录 继承的概念与定义继承的定义定义格式不同继承方式与继承的基类中访问限定符间的影响C中的继承和访问控制总结父类的private成员在子类中的访问限制protected成员的使用场景成员访问方式总结继承方式的默认值实际应用中的继承方式 示例代码 OOP中类之间的关系“is a” …...

汇昌联信科技做拼多多电商怎么引流?

在互联网经济高速发展的今天&#xff0c;电商平台如雨后春笋般涌现&#xff0c;其中拼多多以其独特的社交电商模式迅速崛起。对于汇昌联信科技而言&#xff0c;如何在拼多多平台上有效引流&#xff0c;成为提升销量和品牌知名度的关键。本文将深入探讨汇昌联信科技在拼多多电商…...

公网ip和私网ip的区别

1.接入方式不同\n公网IP以公网连接Internet上的非保留地址&#xff0c;私网IP则是局域网上的IP&#xff0c;通过NAT才能够与公网进行通信。 2.特点不同\n公网IP由国际互联网络信息中心InterNIC负责,将IP地址分配给注册并向InterNIC提出申请的机构或组织。私网IP则是为节省可分…...

【开发踩坑】windows查看jvm gc信息

windows查看jvm gc信息 EZ 找出java进程PID 控制面板----搜索任务管理器---- 任务管理器----搜索 java----详细信息 这里PID是4856 cmd jstat gc面板 reference&#xff1a; jstat命令...

时间序列预测 | CEEMDAN+CNN+Transformer多变量时间序列预测(Python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时间序列预测 | CEEMDANCNNTransformer多变量时间序列预测&#xff08;Python&#xff09; 时间序列预测 创新点 多尺度特征提取&#xff1a;CEEMDAN将复杂的时间序列分解成多个IMFs&#xff0c;使得CNN和Transforme…...

vue3--实现vue2插件JSONPathPicker的路径获取功能

背景 最近在进行vue2项目升级为vue3。 在项目中需要获取json某些字段的路径&#xff0c;vue2中使用JSONPathPicker &#xff0c;但是该插件不支持vue3&#xff0c;vue3中也没有相应的模块有该功能。 实现目标&#xff1a; 原vue2中JSONPathPicker实现的功能&#xff1a; 查…...

SuccBI+低代码文档中心 — 可视化分析(仪表板)(上)

有关仪表板的设计器&#xff1a; 查询设置 由于仪表板的设计器是所见即所得的&#xff0c;可以将当前制作的内容和数据的查询结果实时展示在界面中&#xff0c;当引入到仪表板的模型数据量较大时&#xff0c;为了提高设计器界面的查询性能&#xff0c;提供了以下两种方法&…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...