当前位置:文档之家› 数据结构 线性表

数据结构 线性表

线性结构包括:线性表、堆栈、队列、字符串、数组
等,其中最典型、最常用的是------ 线性表
第2章 线性表
2.1 线性表 2.2 顺序表 2.3 单链表 2.4 循环单链表 2.5 双向链表 2.6 仿真链表
2.1 线性表
2.1.1 线性表的定义
线性表是一种可以在任意位置进行插入和删除数据元 素操作的、由n(n ≥ 0)个相同类型数据元素a0, a1, a2, ..., an-1组成的线性结构。
( A, B, C, D, …… , Z)
分析: 数据元素都是同类型(字母), 元素间关系是线性的。 例2 分析学生情况登记表是什么结构。
学号
姓名
性别
年龄
班级
012003010622
陈建武

19
2003级电信0301班
012003010704
赵玉凤

18
2003级电信0302班
012003010813
对上述公式的解释如图所示
线性表的顺序存储结构示意图
地址 b=LOC(a0)
b+L b +iL
b +(n-1)L
内容
a0 a1 …… ai ai+1 …… an-1
元素在表中的位序 L0
1
i i+1
n-1
b +(maxSize1)L LOC ( ai ) = LOC( a0 ) + L *i
空闲区
例1 设有一维数组M,下标的范围是0到9,每 个数组元素用相邻的5个存储单元存储。设存储 数组元素M[0]的首地址是8,则M[3]的地址是 多少?
构造函数 构造函数
private void initiate(int sz) {
maxSize = sz; size = 0; listArray = new Object[sz]; }
确定maxSize的数值,初始化size的数值,为数组申请内存 空间并使listArray等于(指向)所分配的内存空间。
public void insert(int i, Object obj) {
if (size== maxSize) {
throw new Exception("顺序表已满无法插入!"); } if (i < 0 || i > size) {
throw new Exception("参数错误!"); } for (int j = size; j > i; j--)
23
解:已知地址计算通式为:
LOC(ai) = LOC(a0) + L *i LOC( M[3] ) = 8 + 5 ×3 =23
2.2.2 顺序表类
类包含成员变量和成员函数。 成员变量用来表示抽象数据类型中定义的数据集合 成员函数用来表示抽象数据类型中定义的操作集合 顺序表类实现接口List。顺序表类的public成员 函数主要是接口List中定义的成员函数。
//求元素个数
bool isEmpty();
}
2.2
2.2.1 顺序表
顺序表
用一组地址连续的存储单元依次存储线性表的 各个数据元素。即采用顺序存储结构的线性表。 它通常采用数组实现数据元素的存储。
注意:在C#中数组的下标是从0开始, 即:listArray[n]的有效范围是从 listArray[0]~listArray[n-1]
线性表顺序存储特点:
(1) 逻辑上相邻的数据元素,其物理上也相邻;
(2) 若已知表中首元素在存储器中的位置,则其他元素存放位 置亦可求出(利用数组的下标)。
设首元素a0的存放地址为LOC(a0)(称为首地址), 设每个数据元素占用L个存储空间, 则表中任一数据元素的存放地址为:
LOC ( ai+1 ) = LOC( ai ) + L LOC ( ai ) = LOC( a0 ) + L *i
线性结构的定义:
如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有 一个前驱数据元素和一个后继数据元素; (2)第一个数据元素没有前驱数据元素; (3)最后一个数据元素没有后继数据元素。
则称这样的数据结构为线性结构。
简言之,线性结构反映结点间的逻辑关系是 一对一 (1:1) 的。
线性表的逻辑结构:
(a0, a1, … ai-1,ai, ai+1 ,…, an-1)
线性起点
下标,是元素的 序号,表示元素 在表中的位置
数据元素
ai的直接前趋 ai的直接后继
线性终点
n为元素总
个数,即表 长。n≥0
n=0时称为 空表 用符号()表示
例1 分析26 个英文字母组成的英文表是什么结构。
王泽

19
2003级电信0303班
012003010906
薛荃4班
012003011018
王春

19
2003级电信0305班





分析:数据元素都是同类型(记录),元素间关系是线性的。 注意:同一线性表中的元素必定具有相同特性 !
2.1.2 线性表抽象数据类型
数据集合
listArray[j] = listArray[j - 1]; listArray[i] = obj; size++; }
class SeqList:List
{
数组中当前存储的数据元素的个数
const int defaultSize = 10;
int maxSize;
int size;
存储数据元素的数组
Object[] listArray;
public SeqList( ){ initiate(defaultSize); } public SeqList(int size){ initiate(size); }
(5)线性表是否空isEmpty( )
元素。
线性表抽象数据类型的接口定义如下:
interface List
{
void insert(int i, Object obj);//插入
Object delete(int i); //删除
Object getData(int i); //取数据元素
int getSize();
线性表的数据元素集合可以表示为序列a0, a1, a2,...,
an-1,每个数据元素的数据类型可以是任意的类类型。
操作集合
在线性表的第i个数据元素
(1)求当前数据元素个数getS前ize插( )入数据元素obj。
(2)插入数据元素insert(i, obj)
(3)删除数据元素delete(i)
(4)取数据元素getData(i) 删除线性表的第i个数据
相关主题