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

数组是内存的实现及栈和队列的数据结构

目录

一、数组是内存的实现

二、栈和队列

栈的数据结构

队列

队列的数据结构


一、数组是内存的实现

数组是指多个相同的数据类型在内存中连续排列的一种形式。作为数组元素的各个数据会通过下标编号来区分,这个编号也叫做索引,如此一来,就可以对指定索引的元素进行读写操作。

用char、short、long三种元素来定义数组,数组的元素用[value]括起来,里面的值代表的是数组的长度,就像下面的定义:

char g[100];
short h[100];
long i[100];

数组定义的数据类型,也表示一次能够读写的内存大小,char、short、long分别已1、2、4个字节为例进行内存的读写

数组是内存的实现,数组和内存的物理结构完全一致,尤其是在读写1个字节的时候,当字节数超过1时,只能通过逐个字节来读取,下面是内存的读写过程:

不同数据类型的数组:

二、栈和队列

数组是内存的一种实现,使用数组能够使编程更加高效,也可以通过其他数据结构进行内存的读写

栈(stack)是一种很重要的数据结构,栈采用LIFO(Last In Fist Out)即后入先出的方式对内存进行操作。它就像一个大的收纳箱,你可以往里面放相同类型的东西,比如书,最先放进收纳箱的书在最下面,最后放进收纳箱的书在最上面,如果你想拿书的话,必须从最上面开始取,否则是无法取出最下面的书籍的

栈的数据结构就是这样,你把书籍压入收纳箱的操作叫做 压入(push),你把书籍从收纳箱取出的操作叫做 弹出(pop),它的模型图大概如下:

栈的数据结构

入栈相当于是增加操作,出栈相当于是删除操作,只不过叫法不一样。栈和内存不同,它不需要指定元素的地址。它的大概使用如下:

//压入数据
Push(123);
Push(456);
Push(789);

//弹出数据
J = Pop();
k = Pop();
l = Pop();

在栈中,LIFO方式表示栈的数组中所保存的最后面的数据(Last In)会被最先读取出来(First On)

运行时栈的变化:

队列

队列和栈很相似但又不同,相同之处在于队列也不需要指定元素的地址,不同之处在于队列是一种先入先出(First In First Out)的数据结构。队列在我们生活中的使用很像是我们去景区排队买票一样,第一个排队的人最先买到票,以此类推,俗话说:先到先得。它的使用如下:

//往队列中写入数据
EnQueue(123);
EnQueue(456);
Enqueue(789);

//从队列中读出数据
m = DeQueue();
n = DeQueue();
o = DeQueue();

向队列中写入数据称为EnQeue()入列,从队列中读取数据称为Deqeue()

 队列的数据结构

与栈相对,FIFO的方式表示队列中最先保存的数据会被优先读取出来

运行时队列的变化:

 队列的实现一般有两种:顺序队列循环队列,上图的就是顺序队列

相关文章:

  • 记录:2022-9-30 打家劫舍 二叉搜索树中第K小的元素 公平锁 磁盘调度
  • 基于html宠物用品商城项目的设计与实现(学生网页设计作业源码)
  • 【Java复习】线程安全的 HashMap --- ConcurrentHashMap
  • 《文化相对论》:危机重重的世界,对话才能产生转机
  • 水溶性CuInS/ZnS 量子点 PL 550 nm--800 nm
  • Vue3和react状态管理之Redux与Pinia的使用比较
  • 新学期如何克服“社恐”,猿辅导老师给高中生三条建议
  • 浅析各种主流区块链共识算法的利与弊
  • [架构之路-16]:目标系统 - 硬件平台 - CPU主要物理性能指标
  • 【JAVASE】JDK8新特性
  • 【0121】建立与postgres后端的连接(2)
  • 交换机、IP地址、ARP协议
  • 迭代器并不全是指针,list的迭代器与vector和string的有什么不一样,让博主告诉你其底层原理!
  • 80页4万字政务综合服务平台建设项目方案书(完整版)
  • Python03--python中的标识符和变量以及数据类型
  • [译]CSS 居中(Center)方法大合集
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Angular 响应式表单之下拉框
  • crontab执行失败的多种原因
  • GraphQL学习过程应该是这样的
  • Java反射-动态类加载和重新加载
  • JS变量作用域
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • October CMS - 快速入门 9 Images And Galleries
  • PHP 的 SAPI 是个什么东西
  • SQLServer之创建数据库快照
  • swift基础之_对象 实例方法 对象方法。
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 动态规划入门(以爬楼梯为例)
  • 简单实现一个textarea自适应高度
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 算法系列——算法入门之递归分而治之思想的实现
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 应用生命周期终极 DevOps 工具包
  • 原生 js 实现移动端 Touch 滑动反弹
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 责任链模式的两种实现
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • # 数据结构
  • #define
  • #if #elif #endif
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (1)(1.11) SiK Radio v2(一)
  • (175)FPGA门控时钟技术
  • (2015)JS ES6 必知的十个 特性
  • (26)4.7 字符函数和字符串函数
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇