各种线性表的比较

a { text-decoration: none; font-size: 12px; color: red }
.buryit { display: none }
.diggit { border: 3px dotted red }
.diggit:hover { border: 3px dotted orange }
.diggit:active { border: 3px dotted green }
.postTitle2 { font-size: 30px; color: pink }

顺序表  [代码]

优点

(1)存取速度快:随机存取结构,存取第i个元素所花的时间与i无关,与表长无关,即时间复杂度为O(1)

(2)存储密度高:存储空间的利用率高,顺序表的空间几乎全用来存储数据,只有一小点存储长度值。

缺点

(1)插入删除慢:高密度的存储方式导致插入删除需要移动大量的元素,时间复杂度为O(n)。

(2)易产生碎片:如果经常进行插入和删除操作,会导致空间产生碎片。从而降低了性能。

(3)不可动态扩容:需要在声明表的时候将空间大小提前分配好。

单链表  [代码]

优点:

(1)插入删除快:插入和删除操作不需要移动任何元素,与表长无关,时间复杂度为O(1)

(2)可动态扩容:不需要像顺序表那样需要在一开始先分配好长度,空间分配比较自由。

缺点:

(1)查找读取慢:读取必须从头结点开始沿着链扫描,才能获取元素,时间复杂度为O(n)

(2)存储利用低:每个节点的存储结构都需要分配额外的空间来指明下一个节点的位置。

循环链表  [代码]

与单链表的性质是一样的,只不过将单链表最后一个节点的指针 "指向NULL" 改为 "指向头节点"

形成一个环状,优缺点基本和单链表一致。

不同点:单链表只能访问某个节点的后继节点,而无法访问该节点之前节点,循环链表可以实现从

任意一个节点出发访问其他节点。

双向链表  [代码]

虽然单循环链表可以通过一个节点访问表中所有节点,但是要找到直接前驱却要遍历整个表

因此为了加快寻找某个节点的前驱,可以在每个节点的结构体上添加一个直接访问前驱的指

针域来快速定位前驱节点。

静态链表  [代码]

缺点:

(1)不可动态扩容,静态链表是静态的,需要一开始分配好链表的长度。

(2)没有数组随机存取的特性,即下标所表示的顺序不是链表逻辑的顺序。

(3)总体上没有静态链表灵活,操作起来也是比麻烦和复杂的

说明

与单链表性质是一样的,只是是在数组上建立的静态链表,优缺点基本和单链表相同。

静态链表最好用单链表替代,因为静态链表的缺点多,优点和单链表一样。

而静态链表的存在是因为在C语言之前的一些语言没有指针,如Basic Fotran等语言

而为了实现单链表的功能所以在数组上创建了静态链表,虽然不推荐使用,

但静态链表的思路还是值得学习和了解一下的。

欢迎各位转载,但请指明出处:http://www.cnblogs.com/demonxian3/p/7125697.html

如果你觉得本文不错,请点击这里↓↓

时间: 2024-11-08 19:48:35

各种线性表的比较的相关文章

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

数据结构 笔记2 线性表

线性表是最简单,最常用的一种数据结构,它是由n个数据元素(结点)组成的有限序列. 线性表的基本运算 1.置空表 InitList(L) ,构造一个空的线性表L 2.求表长 ListLength(L) ,返回线性表L中元素个数,即表长. 3.取表中第i个元素GetNode(L,i) ,若1 <= i <= ListLength(L) ,则返回第i个元素a[i] 4.按值查找LocateNode(L,x),在表L中查找第一个值为x的元素,并返回该元素在表L中的位置,若表中没有元素的值为x,则返回0

数据结构与算法之线性表

前言 上一篇<数据结构和算法之时间复杂度和空间复杂度>中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明.这一篇主要介绍线性表. 线性表属于数据结构中逻辑结构中的线性结构.回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构.几何结构.树形结构和图形结构四大结构.其中,线性表就属于线性结构.剩余的三大逻辑结构今后会一一介绍. 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列. 注意: 1.线性表是一个序列. 2.0个元素构成的线性表是空表.

数据导论——线性表

线性表是一种线性结构,由n个数据元素组成的又穷序列,数据元素又称为节点,线性表中的每个数据元素的含义,在不同的应用中各不相同,但在同一个线性表中的数据元素具有相同的特性. 下面的图总结了第二章的主要内容,用于总结和回想,巩固学习: 线性表的基本运算包括:初始化.求表长.读表元素.定位.插入.删除等基本运算,不同的存储结构实现细节可能不同. 在线性表的存储方式有顺序存储和链式存储. 顺序存储的存储方式是最简单的,逻辑顺序对应于存储顺序,数组就是顺序表的表现之一.顺序存储的运算包括插入.删除和定位,

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

数据结构和算法学习总结04 线性表---栈

栈 栈(Stack)是特殊的线性表,是只允许在一端进行插入和删除的线性表. 允许插入和删除的叫栈顶,反之则是栈底. 栈的插入称为进栈,删除称为出栈. 特性是:后进先出,所以栈也叫后进先出表,简称LIFO表(Last In First Out). 因为栈是线性表,所以也有顺序表和链表两种形式,一般我们常用顺序表. 从代码中可以看出:与顺序表相比实际上就是插入和删除操作发生了改变. #include <iostream> using namespace std; const int Stack_S

大话数据结构---顺序存储结构的线性表

线性表的定义:零个或多个数据元素的有限序列. 定义的解读: 首先是由一组数据元素组成,可以基本数据类型,也可以使自定义的类型, 有限的个数,当然可以是0个,也就是空表呗, 还有一个特点就是有序 这么一看线性表抽象出来就和生活中的排队一样,一群小朋友站成一队,每个人都知道自己站在第几个,自己的前面是谁,后面谁,除了排头排位的两个数据,每个数据都有唯一的前驱和后继. 线性表的分类 今天先学习一下顺序存储结构,顺序存储结构指的就是用一段地址连续的存储单元依次存储线性表的数据元素: 这么一看线性表挺像数

【线性表2】线性表的顺序实现:顺序表

顺序表简介 特点:使用一组地址连续的存储单元依次存储表中的数据元素,常见的就是使用数组去实现. 表中逻辑相邻的数据元素,在物理内存上也相邻. 顺序表中的任意数据元素都可随机访问,是一种支持随机访问,长度自动动态调整的线性表结构. 优点:访问表中的元素很快,时间复杂度为O(1) 缺点:插入,删除元素需要移动大量的元素,时间复杂度为O(n) . 因此如果我们在编程中需要这样一种线性表数据结构:构造后对元素的访问操作很频繁,而很少进行增,删等元素位置的调整操作,那么就可以考虑使用顺序表. 代码实现 #

数据结构之线性表

线性表是最简单最常用的一种数据结构,在生活中各个方面都有应用. 线性表的定义:线性表大多数情况下是除了第一个位置的数据元素只存在后继元素,最后一个位置的数据元素只存在前驱元素外,所有数据元素都存在前驱和后继的一个有限序列.举个简单的例子就是:字母表中除了 a 只存在后继 b,z 只存在前驱 y之外,剩余的所有字母全部都有前驱和后继.为什么是大多数情况下,是因为线性表的链式存储结构中除了单向链表,还有循环链表和双向链表. 线性表的存储结构:顺序存储(数组实现,需要预先分配连续的内存空间)和链式存储