`
firesaijj
  • 浏览: 8995 次
  • 性别: Icon_minigender_1
  • 来自: 四川
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据结构学习---线性表的数组实现与单链表实现比较

 
阅读更多
1. 基于时间的比较
  线性表的操作主要有查询,插入,删除三类。
  对于查找操作有基于序号的查找,即存取线性表中i号数据元素,由于数组的随机存取特性,在线性表的顺序存储实现中可以在常数1时间内完成,而在线性表中则需要从节点开始顺着链表才能获取,无法在常数时间内完成,因此顺序存储由于链式存储。查找操作还有基于元素的查找,即线性表是否包含某个元素,元素的序号是多少,这类操作的线性表的顺序存储与链式存储都需要从线性表中的序号为0的元素开始依次查找,因此两种实现性能相同,综上所述,如果在线性表的使用中主要操作时查找,那么应当选用顺序存储实现的线性表。
  对于基于数据元素的插入,删除操作而言,当使用数组实现时,首先需要采用顺序查找定位相应数据元素,然后才能插入,删除,并且在插入,删除过程又需要移动大量元素。相对而言链表的实现只是需要在定位元素的基础上,简单的修改几个指针即可完成,因此链式存储优于顺序存储。对于基于序号的插入,删除操作,因为在顺序存储中平均需要移动一半的元素,而在链式存储中不能直接定位,平均需要比较一半的元素才能定位,因此顺序存储与链式存储性能相当。综上所述,如果在线性表的使用中主要操作时插入,删除,那么选用链式村塾的线性表为佳。
2.基于空间的比较 
  线性表的顺序存储,其存储空间是预先静态分配的,虽然在实现的过程中可以动态扩展数组空间,但是如果线性表的长度变化范围较大,空间在使用过程中育有会存在大量空闲空间,使得存储空间的利用率不高,而线性表的链式存储,其节点空间是动态分配的,不会存在存储空间没有完全利用的情况。因此线性表长度变化较大时,宜采用链式存储结构。
  线性表的数据元素结构简单,并且线性表的长度变化不大时。由于链式存储结构使用了额外存储空间来表示数据元素之间的逻辑关系,因此针对数据域而言,指针域所占的比重较大,而在线性表的顺序存储结构中,没有使用额外的存储空间来表示数据元素之间的逻辑关系,尽管有一定的空闲空间没有利用,但总体而言由于线性表长度变化不大,因此没有利用的空间比例较小,所以当线性表数据元素结构简单,长度变化不大时可以考虑采用顺序存储结构。
分享到:
评论

相关推荐

    数据结构课件 线性表 单链表 栈和队列 串 数组和广义表 树和二叉树 C语言版

    数据结构课件 线性表 单链表 栈和队列 串 数组和广义表 树和二叉树 C语言版 有大量程序代码

    数据结构 线性表 实验代码 C++ 数组

    数据结构 线性表 实验代码 C++ 数组 hust 赵明

    数据结构实验汇总+源代码(线性表、栈、字符串、多维数组、二叉树、图、排序)

    数据结构实验内容:线性表(顺序表实现)、线性表(单链表实现)、栈、字符串、多维数组(三元组表存矩阵)、二叉树(二叉链表和顺序表存储)、邻接表存图以及图的遍历、排序 实验报告部分只要求了线性表、栈、多维...

    数据结构(线性表、单链表、双链表)

    分区 数据结构 的第 2 页 //判断是否为空表,如果为空了,则线性表的长度为0 if(list->seqLength){ //开始打印线性表内容 int i; for(i=0;i<list->seqLength;i++){ printf("%d\t",list->data[i]); } printf("\n"); }...

    数据结构(C#语言版)

    非常清晰易懂的C#数据结构描述。目录如下: 数据结构(C#语言版) -------------------------------------------------- 前 言 1 -------------------------------------------------- 目录 3 ----------------------...

    数据结构 单链表程序

    2、对已建立的单链表实现查找、逆置和计算线性表长度等操作。 void main( ) { int r[100],n,i,x; cout请输入线性表中元素的个数!"; cin>>n; cout请输入线性表中每个元素!"; for(i=0;i;i++) {cout请输入第...

    数据结构——线性表

    另外还实现了简单单链表、简单顺序线性表、从A链表中删除B和C链表共有的元素、单链表逆置(以整数为例)、将链表中元素按递增排序并删除所选定范围内的元素、求一个新的集合A为A和B的交集(采用单链表作为存储结构)...

    精心整理史上最全的数据结构flash演示动画,共5个版本,祝大家考研成功!

    \数据结构flash演示\版本2\2.3 线性表的链式表示和实现-单链表到循环链表的转化.swf \数据结构flash演示\版本2\2.3 线性表的链式表示和实现-单链表的插入.swf \数据结构flash演示\版本2\2.3 线性表的链式表示和...

    DataStructe-Algorithms_Study:研究DataStructe和算法时的一些实践

    添加 Python 代码,学习极客时间的数据结构与算法之美课程的笔记和代码,以及 python 代码实现的 leetcode 题目。 已完成课程: , , C++ 2016-12 记录 学习数据结构和算法时的一些练习代码。 有关算法性能的基本...

    数据结构实验线性表实验报告(代码是java编写的)

    (1)创建一个顺序表,存放在数组 A[N]中,元素的类型为整型,设计算法调整 A,使其左边的所有元素小于 0,右边的所有元素大于 0(要求算法的时间复杂度和空间复杂度均为 O(n))。 (2)建立一个循环单链表,其节点...

    数据结构实验报告 线性表.doc

    目的:通过实现线性表的算法设计,掌握数据结构研究方法,算法设计和分析方法。 要求:①掌握线性表的顺序存储结构和链式存储结构实现,体会两者特点,分析算法效率;②掌握在MyEclipse等集成开发环境中程序的运行和...

    数据结构(C++)有关练习题

    D. *建立函数create:根据一维数组a[n]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。 E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余...

    C语言版数据结构与算法分析-严蔚敏经典视频教程

    01-001数据结构的概念和基本术语、抽象数据类型的表示与实现 01-002算法设计的要求、算法效率的度量 02-001线性表的类型定义 02-002线性表的顺序表示与实现、线性表的基本操作 02-003单链表的创建与操作、加工型...

    数据结构实验线性表(用java创建顺序表与链表并解决实验题目)

    (1)创建一个顺序表,存放在数组 A[N]中,元素的类型为整型,设计算法调整 A,使其左边的所有元素小于 0,右边的所有元素大于 0(要求算法的时间复杂度和空间复杂度均为 O(n))。 (2)建立一个循环单链表,其节点...

    狄泰 c++ 数据结构项目实战

    泛型编程 异常类 线性表 数组 单链表 智能指针 循环链表 双向链表 内核链表 栈和队列 字符串 递归 排序 树 二叉树 图 BFS DFS Prim kruskal Dijkstra Floyd

    数据结构程-习题.doc

    2.2* 已知递增有序的线性表采取顺序存储结构表示,试写一算法,在该表中插入一个值为 x的新元素,并保持线性表的有序性。 2.3* 写一算法,从顺序表中删除自第i个元素开始的k个元素。 2.4* 写一算法,实现顺序表(a1...

    考研-数据结构-殷人昆.zip

    1.1 针对考研数据结构的代码书写规范以及C 与C 语言基础1 1.1.1 考研综合应用题中算法设计部分的代码书写规范1 1.1.2 考研中的C 与C 语言基础3 1.2 算法的时间复杂度与空间复杂度分析基础 12 1.2.1 考研中的算法时间...

    c语言数组指定位置插入和删除-玩转C语言链表,单链表双向链表的建立遍历插入删除... 数组和链表.pdf

    c语言数组指定位置插入和删除-玩转C语言链表,单链表双向链表的建立遍历插入删除... 数组和链表.pdf

    leetcode摇摆-data-structure:java数据结构

    此项目是基于java语言的关于数据结构的代码实现,包含所有经典数据结构算法,并且注释完善,非常适合了解和学习数据结构。另外包含了一个联系人存储工具(phonebook),它由swing展示,并应用了数据结构算法的相关概念...

    数据结构课程设计-C++实验代码

    这个是我亲手所做的数据结构课程设计,完成了: 实验一 单链表的定义和应用 实验要求: 1.用单链表存储结构定义线性表 2.实现单链表基本操作(5个基本操作:构造,销毁,插入,删除, 取指定数据元素) 3.用单链表...

Global site tag (gtag.js) - Google Analytics