线性表的顺序存储和链式存储

顺序存储是分配了一块连续的内存,把这块内存平均分为N份,每份存放一个线性表的单元。从内存利用角度讲,顺序存储需要的是一块连续的内存。特点是查找节点容易,插入、 删除节点比较耗时。

链式存储是分配了几个零散的非连续单元,从内存利用角度讲,它能充分利用那些碎片化的内存。特点是查找节点慢,但插入删除节点快。

怎么理解呢?

下文说的酒店均没有客户记录,就是没有登记某个人住在某个房间。

顺序存储就和某个酒店的一层房间,比如在第一层有100个房间,从1号房间按顺序一致排到底100号房间。你去找一个人,打开1号房间的门,没有,再打开2号房间的门,这样依次进行,直到找到为止。而链式存储就不一样了,虽然也是100个房间,但它这100个房间可能是这样分布的,1号房间在酒店的第一层,2号房间在酒店的第50层,如果想找一个人,还没找到腿就跑断了,所以你理解了顺序存储方便查找而链式存储不方便查找的原因了吗?再看顺序存储的插入和删除,按照线性表的定义,1号房间的客人走了,那么2号房间的客人要挪到1号房间里面,3号房间的客人挪到1号房间,依次类推,1个客人离开要折腾99个客人,增加也是一样的道理。而链式存储的插入、删除操作就简单多了,比如要增加一个客人,先分配一个房间,客人住进来,再把线性表上个单元的房间号和下个单元的房间号写在这个房间的门上就可以了,不用惊动其它房间的客人。

说到线性表,又想到了哈希表,还是住酒店的问题,按照哈希表的定义,客人想住哪个房间不是说随便有个空房间你就去住吧,不是这样的,客人的房间号是算出来的,这个算法叫哈希函数,比如张三经过计算,它的房间号是80号,李四经过计算,它的房间号是12号。你说你想找张三,好,经过计算张三房间就在80号房,你去找吧,根本不用从1号房间打开门看一眼,哦 不是张三,再打开2号房间。。。这是顺序查找的方式,很明显哈希表要快的多。

时间: 2024-10-11 01:33:22

线性表的顺序存储和链式存储的相关文章

数据结构导论 四 线性表的顺序存储VS链式存储

前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char name[30];//姓名 char sex; //性别 int class;//班级 int age;//年龄 } student={"01",“zhangsan”,"m","201","20"}: 链式存储:初始化 //建立一个空链

数据结构学习笔记(二) 线性表的顺序存储和链式存储

线性表:由同类型数据元素构成有序序列的线性结构 -->表中元素的个数称为线性表的长度 -->没有元素时,成为空表 -->表起始位置称表头,表结束位置称表尾 顺序存储: 1 package test; 2 3 /** 4 * 线性表(数组) 5 * 6 */ 7 public class Test { 8 private static int m ; 9 private static int[] a; 10 public static void main(String[] args) {

线性表的Java实现--链式存储(单向链表)

线性表的Java实现--链式存储(单向链表) 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在插入.删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢. 使用链式存储可以克服顺序线性表需要预先知道数据大小的缺点,链表结构可以充分利用内存空间,实现灵活的内存动态管理.但是链式存储失去了数组随机存取的特点,同时增加了节点的指针域,空

2、线性表的实现:链式存储、单链表

1 package ren.laughing.datastructure.baseImpl; 2 3 import ren.laughing.datastructure.base.List; 4 import ren.laughing.datastructure.base.Strategy; 5 import ren.laughing.datastructure.exception.OutOfBoundaryException; 6 /** 7 * 线性表的实现:链式存储结构:单链表 8 * @

c数据结构 -- 线性表之 复杂的链式存储结构

复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 p->next == L? 双向链表 定义:在单链表的每个结点离再增加一个指向直接前驱的指针域 prior,这样链表中就形成了有 两个方向不用的链,故称为双向链表 双向循环链表 定义: 和单链的循环表类似,双向链表也可以有循环表 ·让头节点的前驱指针指向链表的最后一个结点 ·让最后一个结点的后继指

线性表的Java实现--链式存储(双向链表)

有了单向链表的基础,双向链表的实现就容易多了. 双向链表的一般情况: 增加节点: 删除节点: 双向链表的Java实现: package com.liuhao.algorithm;      public class DuLinkList<T> {          /**       * 内部类:链表中的一个节点       *        * @author liuhao data 节点中的数据 prev 指向前一个节点的引用 next 指向下一个节点的引用       */       

队列的定义与操作——顺序存储和链式存储

队列的 存储结构 有 顺序存储 和 链式存储. 1. 队列的顺序存储与操作 (循环队列) 1 typedef int Position; 2 struct QNode { 3 ElementType *Data; // 存储元素的数组 4 Position Front, Rear; // 队列的 头.尾指针 5 int Cap; // 队列最大大容量 6 }; 7 typedef struct QNode *Queue; 8 9 // 操作集 10 Queue CreateQueue(int M

C 数据结构1——线性表分析(顺序存储、链式存储)

之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug也不懂怎么修改,那个时候,电脑一直被我弄蓝屏,这个寒假,重新学习一遍数据结构,获益良多,整理一下,发布出来,求拍砖,共同进步. 线性表(List),0个或者多个数据元素的有限序列 线性表的顺序存储,即线性表通过数组的方式实现,指用一段地址连续的存储单元一次存储线性表的数据元素.如图: A1 A2 -

Java实现线性表-顺序表示和链式表示

顺序表示和链式表示的比较: 1.读写方式:顺序表可以顺序存取,也可以随机存取:链表只能从表头顺序存取元素: 2.逻辑结构与物理结构:顺序存储时,逻辑上相邻的元素其对应的物理存储位置也相邻:链式存储时,逻辑上相邻的元素,其物理存储位置则不一定相邻: 3.查找.插入和删除操作: 按值查找,当线性表在无序的情况下,两者的时间复杂度均为o(n):而当顺序表有序时,可采用折半查找,此时时间复杂度为o(log n): 按位查找,顺序表支持随机访问,时间复杂度为o(1):而链表的平均时间复杂度为o(n). 顺