c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...

上一章节针对于C语言最基本的数据结构链式结构体做了解析,不清楚的可以回顾一下。本章节主要针对于C语言的基础数据结构栈做以解析。

数据结构之栈

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

ffe57640eca06a8d507620fea2efc713.png

故栈基本操作如下:

(1)创建栈

(2)入栈

(3)出栈

(4)判断栈是否为NULL

(5)返回栈顶元素

数据结构之栈分类

根据实现栈的方式,我们可以把栈分为以下三种描述方式:

原生数组描述

动态申请内存的数组描述

链式结构描述

原生数组描述栈

数组描述栈,只不过多了后进先出的限制而已,它是静态分配的,即使用前,它的内存就已经以数组的形式分配好了,所以在使用时,需要注意栈顶标记的大小。

举个例子,把十进制的数字5转二进制的数字,过程大概是这样:

1fadd4274c123cc1cf1542e153e2eb4d.png

原生数组描述栈实现进制转换代码

b13519d97975e92d18b6f2e9cdb97027.png

动态数组实现栈

动态申请内存的数组描述不再采用上述实用性的方法了,而是通过封装相关栈函数去描述这种结构。这是写数据结构的一种大致方法。

1.结构体定义与栈的创建过程:

结构体定义:描述栈的属性栈:栈容量,栈顶标记

创建栈其实就是创建结构体变量

具体代码

d433210a5633d1e1e54c92b96756ead2.png

ps:栈顶标记初始值一般都是-1 ,为了满足栈顶标记和数组下标一致

2.入栈操作

注意: 我们的实现是将最新的元素放在了数组的末尾, 那么数组末尾的元素就是我们的栈顶元素,故可以使用栈顶标记去计算栈中的元素个数。然后每次入栈后,栈顶标记往后移动。

具体实现代码:

39efc03b588883f120981b1d5394c19a.png

3.出栈操作和获取栈顶元素

注意: 出栈操作应该是将栈顶的元素删除,由于数组实现的栈无法删除,故只能把栈顶标记往前移动,简称为一种"伪删除"。

具体实现代码:

f7ef42eaccaf371f43502c90e9a3a2a8.png

4.判断栈是否为空

用户判断栈中是否有元素,通过栈顶标记去做即可

具体实现代码:

2413c5c9e9d54a6fc40865fa126fa4ed.png

动态申请内存的数组描述栈实现进制转换代码

eda207223738ae7bbda6cd386a10ad64.png

链式栈

链式栈:链表的头插法即可

b421ca5cb2e03113651f13140b6a4cd5.png

这个不做详细分析了,希望对大家有帮助!

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!

编程学习软件分享:

27f24d45dbef9876353742ddf03603a9.png

编程学习视频分享:

31ac0edf7584f3815475391c089508be.png

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

C语言C++编程学习交流圈子,点击下方【了解更多】获取更多资料!

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

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

相关文章

【总结记录】面向对象设计OOP三大特性(封装、继承、多态)、七大基本原则的理解(结合代码、现实实例理解)

文章目录一. 三大特征的理解(1)封装(2)继承(3)多态(4)面向对象、面向过程的对比二. 七大基本原则的理解(1)单一职责原则(2)开放封闭原…

mysql 递归查找父节点_MYSQL递归查询所有父节点

1、表结构:CREATE TABLE t_busi_system (ID varchar(64) NOT NULL COMMENT 标识,PARENT_ID varchar(64) DEFAULT NULL COMMENT 父id,CREATE_DATE varchar(64) DEFAULT NULL COMMENT 创建时间,CREATE_USER_ID varchar(64) DEFAULT NULL COMMENT 创建人id,CREATE_USER…

arcmap shp导出cad无反应_如何使用ArcMap将Excel数据转换为shp数据

1. 概述对ArcMap而言,除了shapefile等数据源,还可以将包含地理位置的表格数据以 XY 坐标的形式添加到地图中,比如Excel格式的数据,如果包含有坐标数据在里面,就可以通过导入XY数据的方式将Excel数据导入,最…

【总结记录】《MySQL必知必会》读后笔记,结合 leetcode 例题理解

文章目录一. 《MySQL知会》读后笔记1. 零散的前文知识2. 连接数据库3. 检索数据(重点开始了)4. 排序、过滤数据5. 通配符、正则表达式6. 汇总数据7. 分组数据(1)GROUP BY(数据分组)(2&#xff0…

新松机器人发行价_知识创造财富,“机器人第一股”背后的院士是怎样炼成的?...

‍*本文原创首发于微信公众号“德先生”,未经授权转载必究。机器人的研发、制造、应用,是衡量一个国家科技创新和高端制造业水平的重要标志。上世纪70年代,我国机器人刚刚起步,如今,中国自主品牌机器人依靠技术创新&am…

如何使用CNN进行物体识别和分类_RCNN物体识别

R-CNN,图片识别目标检测(Object Detection)是图像分类的延伸,除了分类任务,还要给定多个检测目标的坐标位置。R-CNN是最早基于CNN的目标检测方法,然后基于这条路线依次演进出了SPPnet,Fast R-CNN和Faster R-CNN,然后到…

python如何不跳行打印_python怎么不换行打印

Python2.7中,执行完print后,会自动换行,如下代码会打印:abc\n123\n(其中\n代表换行)print (abc)print (123)如何实现不换行打印字符呢,下面介绍Python2.7中 实现不换行打印字符的3种简单方法:1.在print函数…

【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数

文章目录零. Java 常用接口函数一. 动态规划二. 链表三. 哈希表四. 滑动窗口五. 字符串六. DFS、BFS七. 二分法八. 二叉树九. 偏数学、过目不忘 and 原地算法等十. 每日一题前言: 是时候开一个对于我的 LeetCode 专栏的总结索引了 虽然说大概只刷了150道左右&#…

nfs服务器_Kubernetes集群下部署NFS持久存储

NFS是网络文件系统Network File System的缩写,NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地的文件系统中,而在本地的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样。kubernetes使用NFS共享存储有两种方式&…

c语言 指针_C 语言指针详解

(给CPP开发者加星标,提升C/C技能)作者:C语言与CPP编程 / 自成一派123(本文来自作者投稿)1为什么使用指针假如我们定义了 char a’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p&a &#xff0c…

kettle 插入更新 数据增量_使用Kettle工具进行增量数据同步

增量同步的方式有很多种,我使用的是: 快照表 触发器需求:当主库库表发生增删改时,从库库表与主库库表数据保持一致。环境:1、Mysql2、kettle 7.1思路:1、在主库中,将需要同步的库表新建快照表,…

idea修改代码后不重启项目_使用DevTool实现SpringBoot项目热部署

前言最近在开发的时候,每次改动代码都需要启动项目,因为有的时候改动的服务比较多,所以重启的次数也就比较多了,想着每次重启等待也挺麻烦的,就打算使用DevTools工具实现项目的热部署热部署是什么大家都知道在项目开发…

vue 计算文件hash值_vue的hash值原理,也是table切换。

.pages>div{display: none;}aaabbbcccc首页关于我的页面用户中心//hash 和页面一一对应起来//router 配置var router [{path:"/",component:document.getElementById("home")},{path:"/about",component:document.getElementById("abou…

c++ 单例模式_Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

redis作为一种高效的缓存框架,使用是非常广泛的,在数据存储上,在运行时其将数据存储在内存中,以实现数据的高效读写,并且根据定制的持久化规则不同,其会不定期的将数据持久化到硬盘中。另外相较于其他的NoS…

jenkins 插件目录_10 个 Jenkins 实战经验,助你轻松上手持续集成

众所周知,持续构建与发布是我们日常工作中要面对的的一个重要环节,目前很多公司都采用 Jenkins 来搭建符合需求的 CI/CD 流程,作为一个持续集成的开源工具,它以安装启动方便,配置简单,上手容易的特点&#…

手机python3l运行_Python3 os.lchflags() 方法

Python3 os.lchflags() 方法概述os.lchflags() 方法用于设置路径的标记为数字标记,类似 chflags(),但是没有软链接。只支持在 Unix 下使用。语法lchflags()方法语法格式如下:os.lchflags(path, flags)参数path -- 设置标记的文件路径flags --…

jdbc 批量insert_JDBC相关知识解答

1. JDBC_PreparedStatement插入大量数据_批处理插入_效率比较(1) jdbc新增大量数据时, 如何处理能提高效率?答:使用批处理提高效率(2) 什么是批处理? JDBC如何进行批处理?答:批处理:在与数据库的一次连接中,批量的执行条 SQL 语…

lin通信ldf文件解析_lin ldf

Baby-LIN 采用闪存来保存固件, 因此更新和升级非常简便。 Baby-LIN 的软件套装是 LINWorks。这个软件包包括几个不同的应用程序。 LINWorks LDF-Editor 可以检查、......并且在未加载 LDF/SDF 文件的情况下,也可以用来监测与记录总线数据。 Baby-LIN-DLL 库文件可让用户编写应用…

vue项目使用大华摄像头怎样初始化_Vue接入监控视频技术总结

最近一直在搞监控视频接入方面的事情,积累了不少的经验,这里总结一下。提前说一句,本文提到的视频接入均是以RTSP为基础转码而来的,至于用海康大华等插件播放的咱们就闭口不提了可以看这个文章,在vue中接入ocx控件播放…

python 实现显著性检测_强!汽车车道视频检测:python+OpenCV为主实现

1 说明:1.1 完整版:汽车车道动态视频检测讲解和注释版代码,小白秒懂。1.2 pythonOpenCVmoviepynumpy为主的技术要点。1.3 代码来源:https://github.com/linghugoogle/CarND-Advanced-Lane-Lines #虽然感觉也是fork别人的&#xff…