从数据的逻辑结构来分,数据元素之间存在的关联关系被称为数据的逻辑结构。归纳起来,应用程序中的数据大致有如下四种基本的逻辑结构:
1、集合:数据元素之间“同属于一个集合”的关系
2、线性结构:数据元素之间存在一个对一个的关系。
3、树形结构:数据元素之间存在一个对多个的关系。
4、图状或网状结构:数据元素之间存在多个对多个的关系。
对于常用的数据结构,可以将其简单地分为线性结构和非线性结构。其中线性结构主要是线性表,非线性结构则主要是树和图。本次讨论线性表。
线性表(Linear List)是由 n(n >= 0)个数据元素(节点)a1a2a3a4……an组成的有序序列。
线性表中的每个元素必须具有相同的结构(即拥有相同的数据项)。线性表是线性结构中最简单也是最常用的一种数据结构。很多人容易把线性表的数据元素理解成简单的数据项,其实不然。如下图所示就是一个线性表。
员工编号 | 姓名 | 年龄 | 学历 |
---|---|---|---|
0001 | 孙悟空 | 500 | 专科 |
0002 | 猪八戒 | 400 | 本科 |
0003 | 沙和尚 | 300 | 本科 |
0004 | 唐三藏 | 40 | 硕士 |
…… | …… | …… | …… |
对于上表的数据而言,它本质上依然是线性表,只是他的每个数据元素都是一个“符合”的对象,每个数据元素包括四个数据项(也被称为Field):员工编号,姓名,年龄,学历。
关于线性表还可以有如下定义:
1、线性表中包含的数据元素个数 n 被称为表的长度,当线性表的长度为 0 时该表也被称为空表。
2、当 n > 0 时,表可以表示为:(a1,a2,a3,a4,a5,……an)
对于一个非空的、有限的线性表而言,它总具有如下基本特征:
(1)、总存在唯一的“第一个”数据元素。
(2)、总存在唯一的“最后一个”数据元素。
(3)、除第一个数据元素外,集合中的每一个数据元素都只有一个前驱的数据元素。
(4)、除最后一个数据元素外,集合中的每一个数据元素都只有一个后继的数据元素。
(关于前驱和后继的概念可以去查查有关有向图中拓扑排序的书籍)。
如果要实现一个线性表,程序首先需要确定该线性表的每个数据元素。接下来,应该为该线性表实现如下操作:
(1)、初始化:通常是一个构造器,用于创建一个空的线性表。
(2)、返回线性表的长度:该方法用于返回线性表中数据元素的个数。
(3)、获取指定索引处的元素:根据索引返回线性表中的数据元素。
(4)、按值查找数据元素的位置:如果线性表中存在一个或多个与查找值相等的数据元素,那么该方法返回第一个搜索到的值相等的数据元素的索引,如果没有则返回 -1。
(5)、直接插入数据元素:向线性表的头部插入一个数据元素,线性表的长度 +1、
(6)、向指定位置插入元素:向线性表的指定索引处插入一个数据元素,线性表的长度 +1、
(7)、直接删除数据元素:删除线性表头部的数据元素,线性表的长度 -1.
(8)、删除线性表中指定索引处的数据元素:删除线性表中指定索引处的数据元素,线性表的长度-1.
(9)、判断线性表是否为空:该方法判断线性表是否为空,如果线性表为空,则返回 true,如果不为空,则返回 false。
(10)、清空线性表:将线性表清空。