数据结构零基础C语言版 严蔚敏-线性表、顺序表

二、顺序表和链表

1. 线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串......

线性表在逻辑上是线性结构,也就说是连续的一条直线。但在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第1张图片

2. 顺序表

-概念及结构:

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。

1. 静态顺序表:使用定长数组存储元素。

 数据结构零基础C语言版 严蔚敏-线性表、顺序表_第2张图片

顺序表就是数组,但是是在数组的基础上,他还要求数据是从头开始存且连续存储的,不能跳跃间隔。

静态特点:满了不让插入   缺点:不能确定给多少合适,给小不够用,给多浪费

2. 动态存储表:使用动态开辟的数组存储。

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第3张图片

扩容代码:

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第4张图片

例题:移除数组中指定的元素

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第5张图片

思路:

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第6张图片

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第7张图片

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第8张图片

思路3主要代码:

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第9张图片

例题: 删除有序数组中的重复项

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第10张图片

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第11张图片

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第12张图片

代码:

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第13张图片

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第14张图片

例题:合并两个有序数组

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第15张图片

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第16张图片

代码:

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第17张图片

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第18张图片

顺序表的缺陷:

1. 如果空间不够,要增容,则需要付出代价。

由于realloc扩容分两种,一种原地扩容,一种异地扩容,如下:

realloc原地扩容(有足够大的空间,直接在原有的地址后面扩容,还返回原地址)

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第19张图片

realloc异地扩容(后面无足够的空间,则寻找新地址,将原数据拷贝到新地址,释放旧空间,返回新地址)

数据结构零基础C语言版 严蔚敏-线性表、顺序表_第20张图片

2. 为避免频繁扩容,所以满了我们基本都是扩充2倍,由此就会导致一定空间的浪费。

3. 顺序表要求数据是从开始位置连续存储,若想在头部或中间位置插入删除数据,就需要挪动数据,效率较低。

链表就是针对顺序表的缺陷而设计得来。

你可能感兴趣的:(数据结构,c语言,开发语言)