room是什么意思 rom是什么意思( 三 )


room是什么意思 rom是什么意思

文章插图
入栈相当于是增加操作,出栈相当于是删除操作,只不过叫法不一样 。栈和内存不同,它不需要指定元素的地址 。它的大概使用如下
// 压入数据
Push(123);
Push(456);
Push(789);
// 弹出数据
j = Pop;
k = Pop;
l = Pop;
在栈中,LIFO 方式表示栈的数组中所保存的最后面的数据(Last In)会被最先读取出来(First On) 。
room是什么意思 rom是什么意思

文章插图
队列队列和栈很相似但又不同,相同之处在于队列也不需要指定元素的地址,不同之处在于队列是一种 先入先出(First In First Out) 的数据结构 。队列在我们生活中的使用很像是我们去景区排队买票一样,第一个排队的人最先买到票,以此类推,俗话说: 先到先得 。它的使用如下
// 往队列中写入数据
EnQueue(123);
EnQueue(456);
EnQueue(789);
【room是什么意思 rom是什么意思】// 从队列中读出数据
m = DeQueue;
n = DeQueue;
o = DeQueue;
向队列中写入数据称为 EnQueue入列,从队列中读出数据称为DeQueue 。
room是什么意思 rom是什么意思

文章插图
与栈相对,FIFO 的方式表示队列中最先所保存的数据会优先被读取出来 。
room是什么意思 rom是什么意思

文章插图
队列的实现一般有两种:顺序队列 和 循环队列,我们上面的事例使用的是顺序队列,那么下面我们看一下循环队列的实现方式
环形缓冲区
循环队列一般是以环状缓冲区(ring buffer)的方式实现的,它是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流 。假如我们要用 6 个元素的数组来实现一个环形缓冲区,这时可以从起始位置开始有序的存储数据,然后再按照存储时的顺序把数据读出 。在数组的末尾写入数据后,后一个数据就会从缓冲区的头开始写 。这样,数组的末尾和开头就连接了起来 。
room是什么意思 rom是什么意思

文章插图
链表下面我们来介绍一下链表和 二叉树,它们都是可以不用考虑索引的顺序就可以对元素进行读写的方式 。通过使用链表,可以高效的对数据元素进行添加 和 删除操作 。而通过使用二叉树,则可以更高效的对数据进行检索 。
在实现数组的基础上,除了数据的值之外,通过为其附带上下一个元素的索引,即可实现链表 。数据的值和下一个元素的地址(索引)就构成了一个链表元素,如下所示
room是什么意思 rom是什么意思

文章插图
对链表的添加和删除都是非常高效的,我们来叙述一下这个添加和删除的过程,假如我们要删除地址为 p[2] 的元素,链表该如何变化呢?
room是什么意思 rom是什么意思

文章插图
我们可以看到,删除地址为 p[2] 的元素后,直接将链表剔除,并把 p[2] 前一个位置的元素 p[1] 的指针域指向 p[2] 下一个链表元素的数据区即可 。
room是什么意思 rom是什么意思

文章插图
那么对于新添加进来的链表,需要确定插入位置,比如要在 p[2] 和 p[3] 之间插入地址为 p[6] 的元素,需要将 p[6] 的前一个位置 p[2] 的指针域改为 p[6] 的地址,然后将 p[6] 的指针域改为 p[3] 的地址即可 。
链表的添加不涉及到数据的移动,所以链表的添加和删除很快,而数组的添加涉及到数据的移动,所以比较慢,通常情况下,使用数组来检索数据,使用链表来进行添加和删除操作 。
二叉树二叉树也是一种检索效率非常高的数据结构,二叉树是指在链表的基础上往数组追加元素时,考虑到数组的大小关系,将其分成左右两个方向的表现形式 。假如我们把 50 这个值保存到了数组中,那么,如果接下来要进行值写入的话,就需要和50比较,确定谁大谁小,比50数值大的放右边,小的放左边,下图是二叉树的比较示例
room是什么意思 rom是什么意思

文章插图
二叉树是由链表发展而来,因此二叉树在追加和删除元素方面也是同样有效的 。
这一切的演变都是以内存为基础的 。
作者简介:cxuan 一个正在路上坚持信仰的技术人
声明:本文为作者投稿,版权归作者个人所有 。
【End】