赞
踩
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,通常记为:
(a1,a2,… ai-1,ai,ai+1,…an) 其中n为表长, n=0 时称为空表。
在线性表中相邻元素之间存在着顺序关系。对于元素ai 而言,ai-1 称为 ai 的直接前趋,ai+1 称为 ai 的直接后继。即:
(1)有且仅有一个开始结点(a1),它没有直接前趋;
(2)有且仅有一个终端结点(an),它没有直接后继;
(3)除了开始结点和终端结点以外,其余的结点都有且仅有一个直接前驱和一个直接后继。
例如一年12个月:
(1,2,3,4,5,6,7,8,9,10,11,12)
在C或C+ +语言中我们可以把它们定义为数值型。
又例如26个英文字母表:
( a,b,c,d,e,f,g,……,x,y,z)
在C或C+ +语言中我们可以把它们定义为字符型。
例如我们曾经在绪论中引用的一个学生入学情况表(表2-1)可以是用户自定义的学生类型(如C语言中的结构体或数据库管理系统中的记录)。
由于表格中各记录之间存在“一对一”的关系,所以它也是一种线性表。
Linearity =(D,R)
数据对象:D={ai ∣ 1<=i<=n n>=0}
数据关系:{< ai-1,ai > ∣ 2<=i<=n} ai-1, ai∈D
关系中< ai-1, ai >是一个序偶的集合,它表示线性表中数据元素的相邻关系,即 ai-1领先ai ,ai领先 ai+1。
线性表的抽象数据类型主要包括两个方面:数据集合和该数据集合上的操作集合。线性表的常见操作有插入、删除、查找、获取元素值、设置元素值等,在java语言中,抽象数据类型通常设置成接口。线性表抽象数据类型的java接口声明如下:
package net.army.dataproject.day03;
/**
* 作者:梁辰兴
* 日期:2023/3/14
* 功能:线性表接口
*/
public interface LinearList<T> {
public T get(int i);
public void set(int i, T t);
public int insert(T t);
public int insert(int i, T t);
public T remove(int i);
public boolean contains(T key);
public int indexOf(T key);
public int size();
public void clear();
public boolean isEmpty();
public void printList();
}
其实,java语言中的 java.util
包中的 List
接口就是线性表,它的实现子类 ArrayList
就是顺序表,LinkedList
就是链表。
线性表上的基本操作有:
初始条件:表不存在。
操作结果:构造一个空的线性表。
初始条件:表L存在。
操作结果:返回线性表中的所含元素的个数。
初始条件:线性表L存在
操作结果:在表L中查找值为x的数据元素,其结果返回在L中首次出现的值为x的那个元素的序号或地址,称为查找成功; 否则,在L中未找到值为x的数据元素,返回一个特殊值表示查找失败。
初始条件:线性表L存在,插入位置正确 (1<=i<=n+1,n为插入前的表长)。
操作结果:在线性表L的第 i 个位置上插入一个值为 x 的新元素,这样使原序号为 i , i+1, … , n 的数据元素的序号变为 i+1,i+2, … , n+1,插入后表长=原表长+1。
初始条件:线性表L存在,1<=i<=n。
操作结果:在线性表L中删除序号为i的数据元素,删除后使序号为 i+1, i+2,…, n 的元素变为序号为 i, i+1,…,n-1,新表长=原表长-1。
初始条件:线性表L存在,且非空。
操作结果:显示线性表L中的所有元素。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。