数据结构和算法(3):线性表的基本特性

目录

线性表的定义

线性表的两种存储结构

顺序存储方式

链式存储方式

 顺序存储和链式存储两种方式的相关比较


线性表的定义

线性表(List):零个或多个数据元素的有限序列。首先它是一个序列。元素之间是有顺序的。 若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。数据元素之间的关系是一对一的关系。其次,线性表强调是有限的。线性表元素的个数n(n≥0)定义为线性表的长度,当n=0时,成为空表。

线性表的两种存储结构

顺序存储方式

线性表的顺序存储结构,指的是用一段地址连续的存储单元以此存储线性表的数据元素。也被称作“静态数据结构(Static Data Structure)”,它在编译时就给相关的变量分配好内存空间。例如数组类型就是一种典型的静态数据结构。

优点

缺点

顺序存储

1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间。

2.可以快速地存储表中任一位置的元素。

1.插入和删除操作需要移动大量元素。

2.当线性表长度变化较大时,难以确定存储空间的容量。

3.造成存储空间的“碎片”。

链式存储方式

为了解决顺序存储在插入和删除时需要移动大量元素的缺点,于是就有了链式存储方式。

它使用不连续的内存空间存储具有线性表特性的数据。也被称作“动态数据结构(Dynamic Data Structure)”,它的基本精神就是:让内存的使用根据弹性,可在程序执行期间根据用户的设置与需求,适当给变量分配所需要的内存空间。

在顺序存储结构中,每个数据元素只需要存数据元素信息就可以了。但在链式存储结构中,除了要存数据元素信息之外,还要存储它的后继元素的存储地址。我们把存储数据元素信息的域成为数据域,把存储直接后继位置的域成为指针域(C、C++的指针)。指针域中存储的信息被称做指针或链。这两部分信息组成数据元素的存储映像,成为节点(Node)。n个节点链结成一个链表,即为线性表的链式存储结构。

优点

缺点

链式存储

1.数据的插入和删除都相对方便,不需要移动大量数据。

2.因为动态数据结构的内存分配是在程序执行时才进行分配的,所以不需要事先声明,这样能充分节省内存。

1.设计数据结构时比较麻烦。

2.在查找数据时,也无法像静态数据一样随机读取,必须按顺序找到该数据为止。

 顺序存储和链式存储两种方式的相关比较

顺序存储(静态分配内存)

链式存储(动态分配内存)

内存分配

编译阶段

运行阶段

内存释放

不需要释放,程序结束时自动归还给系统

程序结束前必须释放分配的内存空间,否则造成内存“泄露”(Memory Leak)

程序运行性能

较高。(程序编译阶段已确定所需分配的内存容量)。

较低。(因为所需内存要到程序执行时才能分配)

指针遗失

没有此问题

若指向动态分配空间的指针在未释放该地址空间之前,又指向了别的内存空间时,则原本所指向的内存空间将无法被释放,而造成内存“泄露”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值