大话数据结构读书笔记(2)----线性表(1)

来源:互联网 发布:dedecms tag 数据库 编辑:程序博客网 时间:2024/05/22 12:53

1、线性表的定义

线性表(List):零个或多个数据元素的有限序列。
下面是对定义的几点说明:
首先,它是一个序列,说明元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。
然后,线性表是有限的,无线的数列,只存在于数学概念中。
在较复杂的线性表中,一个数据元素可以由若干个数据项组成。例如下表所示的内容,姓名,性别,出生年月可以称之为数据项。
这里写图片描述

2、线性表的顺序存储结构

线性表的顺序存储结构指的是:用一段地址连续的存储单元依次存储线性表的数据元素(例如,一维数组)。

数据长度与线性表长度的区别:
数组的长度是存放线性表的存储空间的长度,存储分配后一般是不变的。线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。在任意时刻,线性表的长度应该小于等于数组的长度。

线性表的插入操作
插入算法的思路

  1. 如果插入位置不合理,抛出异常;
  2. 如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
  3. 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
  4. 将要插入元素填入i处;
  5. 表长加1。

实现代码如下:
这里写图片描述
线性表的删除操作
删除算法思路:
6. 如果删除位置不合理,抛出异常;
7. 取出删除元素;
8. 从删除位置开始遍历到最后一个元素位置,分别将他们向前移动一个位置;
9. 表长减1。
实现代码如下:
这里写图片描述
这里写图片描述

3、线性表的链式存储结构

顺序存储结构在插入和删除时需要移动大量的元素,可以用一种方法来解决:所有元素都不考虑相邻位置,只需要知道下一个元素的位置在哪里。结构如下图所示:
这里写图片描述
n个结点链成一个链表,即为线性表(a1,a2,…,an)的链式存储结构,因为此链表的每个结点中只包含一个指针域,所以叫做单链表。链表中的第一个结点的存储位置叫做头指针,第一个结点前附设一个结点成为头结点。头结点的指针域存储指向第一个结点的指针。
这里写图片描述
结点由存放数据元素的数据域和存放后继结点地址的指针域组成。假设p是指向第i个元素的指针,数据域可以用p->data来表示,指针域可以用p->next来表示,指向第i+1个元素。