【数据结构】顺序表和链表的比较

顺序表和链表各有短长。在实际应用中究竟选用哪一种存储结构呢?这要根据具体问题的要求和性质来决定。通常有以下几方面的考虑

┌───┬───────────────┬───────────────┐

│      │         顺序表          │         链表            │

├─┬─┼───────────────┼───────────────┤

│基│分│静态分配。程序执行之前必须明确│动态分配只要内存空间尚有空闲,│

│于│配│规定存储规模。若线性表长度n变 │就不会产生溢出。因此,当线性表│

│空│方│化较大,则存储规模难于预先确定│的长度变化较大,难以估计其存储│

│间│式│估计过大将造成空间浪费,估计太│规模时,以采用动态链表作为存储│

│考│  │小又将使空间溢出机会增多。    │结构为好。                    │

│虑├─┼───────────────┼───────────────┤

│  │存│为1。当线性表的长度变化不大, │<1                            │

│  │储│易于事先确定其大小时,为了节约│                              │

│  │密│存储空间,宜采用顺序表作为存储│                              │

│  │度│结构。                        │                              │

├─┼─┼───────────────┼───────────────┤

│基│存│随机存取结构,对表中任一结点都│顺序存取结构,链表中的结点,需│

│于│取│可在O(1)时间内直接取得      │从头指针起顺着链扫描才能取得。│

│时│方│线性表的操作主要是进行查找,很│                              │

│间│法│少做插入和删除操作时,采用顺序│                              │

│考│  │表做存储结构为宜。            │                              │

│虑├─┼───────────────┼───────────────┤

│  │插│在顺序表中进行插入和删除,平均│在链表中的任何位置上进行插入和│

│  │入│要移动表中近一半的结点,尤其是│删除,都只需要修改指针。对于频│

│  │删│当每个结点的信息量较大时,移动│繁进行插入和删除的线性表,宜采│

│  │除│结点的时间开销就相当可观。    │用链表做存储结构。若表的插入和│

│  │操│                              │删除主要发生在表的首尾两端,则│

│  │作│                              │采用尾指针表示的单循环链表为宜│

└─┴─┴───────────────┴───────────────┘

存储密度(Storage Density)是指结点数据本身所占的存储量和整个结点结构所占的存储量之比,即

存储密度=(结点数据本身所占的存储量)/(结点结构所占的存储总量)

总结起来就是:

1.长度很不明确,用链表

2.查询频度远大于修改 顺序表 反之链表

3.修改代价很高 链表

时间: 2024-10-13 12:14:10

【数据结构】顺序表和链表的比较的相关文章

8.基本数据结构-顺序表和链表

一.内存 - 计算机的作用:对数据进行存储和运算.首先我们需要知道我们目前使用的计算机都是二进制的计算机,就以为着计算机只可以存储和运算二进制的数据.例如下载好的一部电影,该电影可以存储到计算机中,计算机中存储的是基于二进制的电影数据,然后我们可以通过相关的视频播放软件结合相关的硬件对电影的二进制数据进行相关的运算操作,所产生的结果就是我们可以看到电影的画面和听到音频的声音. - 问题:阐述计算机如何计算1+2的结果? - 阐述:简单理解为,首先可以将1和2输入到计算机中,然后计算机会将1和2转

c数据结构 顺序表和链表 相关操作

编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include<stdlib.h> #define LINK_INIT_SIZE 100#define LISTINCREAMENT 10#define ElemType int#define OVERFLOW -2#define OK 1#define ERROR 0 typedef int status; /

(数据结构)顺序表与链表的基本操作代码以及比较

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

【数据结构】之顺序表和链表的比较

1.顺序表 顺序表的优点: (1) 方法简单,各种高级语言中都有数组,容易实现.(2) 不用为表示结点间的逻辑关系而增加额外的存储开销.(3) 顺序表具有按元素序号随机访问的特点. 顺序表的缺点: (1) 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低.(2) 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置:预先分配过小,又会造成溢出. 2.链表 链表的优点: (1) 在链表中做插入删除操作时,不会影响前面和后面的节点,因此对n较大的链表

《数据结构》复习之线性表(顺序表和链表)

线性表的概念 线性表的比较 线性表的数据结构 顺序表的算法操作 双链表的补充 总结 1.线性表的概念 线性表的存储结构有顺序存储结构和链式存储结构两种.前者成为顺序表,后者称为链表. 顺序表: 顺序表就是把线性表中的所有元素按照其逻辑顺序,一次存储到从指定的存储 位置开始的一块连续的存储空间中,如下图所示. 链表 在链表的存储中,每一个节点不仅包含所存元素本身的信息,还包含元素之间的逻辑关系的信息,即前驱节点包含后继节点的地址信息,这样就可以通过前驱节点中的地址信息方便地找到后继节点的位置,如下

数据结构 --- 02. 内存, 顺序表, 单链表

一.内存 1.基本概念 计算机的作用: 就是用来存储和运算二进制的数据 变量的概念: 就是计算机中的某一块内存空间   衡量计算机内存大小的范围: bit byte kb mb 计算机中内存空间都会有两个基本的属性 大小 地址 不同数据占用内存空间的大小 整数:4byte float:4byte double:8byte 字符:1byte 理解a=10的内存图(引用,指向) 指向:如果一个变量存储了某一块内存空间的地址,则表示该变量指向该块内存 引用:如果一个变量存储了某一块内存空间的地址,则该

线性表-顺序表、链表类模板的实现(数据结构基础 第2周)

学习完课程后,自己用C++实现了简单的顺序表和链表,并用约瑟夫问题做了测试,不保证完全正确. 其中有一点需要注意一下:C++中类模板声明头文件和实现头文件不可以分离到.h和.cpp中,否则无法正常编译,详见:https://www.zhihu.com/question/20630104 源码 1.顺序表 //seqlist.h #pragma once #include <iostream> using namespace std; template <class T> class

线性表 及Java实现 顺序表、链表、栈、队列

数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高.同时,它也是软考的重点,我们需要对这部分的内容进行一下总结. 我们先看一下数据结构和算法的整体内容. 1.线性表 概念: 数据元素的排列方式是线性的. 分类: 分类规则是根据上图中元素的存储结构来划分的. (1)顺序表 基本思想:元素的存储空间是连续的.在内