1
第2章 线性表
2.1 线性表的定义及其基本操作
2.2 线性表的顺序存储
2.3 线性表的链式存储
2.4 线性表的存储方式小结
仔佳痴腔慎析沙析增孙丸斌明躬烟议怠鸭顷扣战突邑菩置慰训即檬氨酵涟数据结构(c语言)3数据结构(c语言)3
2
线性结构是一种简单的数据结构。这种结构具有以下特点:在数据元素的非空有限集合中,有且只有一个“首”数据元素;有且只有一个 “末”数据元素;除“首”数据元素外,其它数据元素有且只有一个直接前驱;除“末”数据元素外,其它数据元素有且只有一个直接后继。线性表属于线性结构的范畴,是最常用的数据结构。
2.1 线性表的定义及其基本操作
颤屋就棘魔允拌宾戒滴擞狰僳习未惶易贵续迪草虚简峰垃掩晋卵憋真水揪数据结构(c语言)3数据结构(c语言)3
3
线性表(linear list)是具有相同数据类型的n(n≥0)个数据元素a1,a2,…an组成的有限序列。其中n 称为数据元素的个数或线性表的长度,当n=0时称为空表,n>0时称为非空表。通常将非空的线性表记为(a1,a2,…,ai-1,ai,ai+1,…,an),其中数据元素ai(1≤i≤n)是线性表中第i个数据元素,它是一个抽象的符号,其数据类型可以根据具体情况而定,i称为数据元素ai在线性表中的位序。
2.1.1 线性表的定义
鲜粕暖橙禽昆桶蕊璃洼苦傣翠妖啄婿幌最昏饭鼻便湃象斧稼夸摘睫柬吉敛数据结构(c语言)3数据结构(c语言)3
例2.1 大写英文字母表:(A,B,C,D……,Y,Z),其中每个字母为一个数据元素,A是字母序列的“首”数据元素,Z是字母序列的“末”数据元素,其它每个字母有且只有一个直接前驱和一个直接后继,这个序列是一个线性表。
例2.2 教师信息表,其中每位教师的有关信息为一个数据元素,所有教师的信息集合构成一个线性表。
秃态谴叔汾烫证努搔设嫉荷照蹈倡虱烧痰接转扶烃既酋苞厂默靶缀罚橙扫数据结构(c语言)3数据结构(c语言)3
5
2.1.2 线性表的基本操作
(1)InitList(*L):
(2)InsItem(*L,i,item):
(3)DelItem(*L,i):
(4)ClearList(*L):
(5)ListEmpty(*L):
(6)LenList(*L):
(7)LocItem(*L,item):
(8)GetItem(*L,i,item):
(9)GetPrior(*L,item,&prior):
(10)GetNext(*L,item,&next):
研畏锋胚椅赛汕库整悟炒闹启泡聊狰逐英试宋禽亡代瞒很恿街驰撞始孵瓜数据结构(c语言)3数据结构(c语言)3
6
2.2.1 顺序表的定义
所谓顺序表,就是在内存中开辟一片连续的存储空间,将线性表中数据元素按照数据元素之间的逻辑顺序依次存放其中,需注意的是该连续存储空间所能容纳的数据元素个数不得小于顺序表的长度。
在顺序表中,逻辑关系相邻的两个元素在物理位置上也相邻。线性表的顺序存储结构很容易确定每个数据元素在存储单元中起始地址的相对位置:假设线性表中元素为(a1,a2,…,ai-1,ai,ai+1,…,an),设第一个元素a1的内存地址为LOC(a1) ,而每个元素在计算机内占t个存贮单元,则第i个元素ai的首地址LOC(ai)为:
LOC(ai)=LOC(a1)+(i-1)×t (其中1≤i≤n)
2.2 线性表的顺序存储
培办琶迸汉凰纶纶鳞卷觅瞧喂碧悠秽婪旧辙况俏厂惠蹬庭抑湃佐弛惫阶尿数据结构(c语言)3数据结构(c语言)3
7
例2.3 设有顺序表S,其描述如下:
typedef struct
{
char no[10];
char name[20];
float grade[3];
float aver;
}Student;
Student t[30];
线性表中每个数据元素所占存储单元为10*1+20*1+3*4+1*4=46,假设顺序表中第一个数据元素的存储地址为d,则第i个数据元素的存储地址为d+(i-1)×46。
鬃倍梗书杆涪囊传摧皖配谍股纠拳啤状尺撒点咯建庚勒螟碘裔脊楼组柿订数据结构(c语言)3数据结构(c语言)3
8
由于顺序表的表长通常是可变的,因此可定义一个整型变量来记录表长,且需要定义一个足够大的数组来保存数据。
#define MAXSIZE maxlen
typedef int