一、ADT表
线性表是一种非常灵活的结果,可以根据需要改变表的长度,也可以在任何位置对元素进行访问,插入或者删除操作.另外,还可以将多个表连接成一个表,或者把一个表拆分成多个表
1、ADT表定义
线性表List是n个相同类型数据元素a1,a2,...an构成的有限序列.表示成List=(a1,a2...,an)
2、表长
线性表中元素的个数,n=0时为空表
3、表的前驱和后继
线性表的ai领先于ai+1,则ai+1是ai的后继,ai-1是ai的前驱。
4、抽象数据类型List
5、线性表的基本运算
5.1、ListEmpty(L):测试表L是否唯恐
5.2、ListLength(L):表L的长度
5.3、ListLocate(x,L):元素x在表L中的位置,若x在表中重复出现多次,则返回最前面的x位置
5.4、ListRetrieve(k,L):返回表L的位置k处的位置的元素。表中没有位置k时,该运算无意义
5.5、ListInsert(k,x,L):在表L的位置k之后插入元素x,并将原来占据该位置的元素及其后面的元素依次后移一个位置,如果表中没有位置k,则运算无意义。
5.6、ListDelete(k,L):从表L中删除位置k处的元素,并返回该位置删除的元素。表中没有这个位置k时,运算无意义。
5.7、PrintList(L):将表L中所有的元素按位置的先后顺序先后输出。
6、用数组实现表
6.1、顺序表:一组地址连续的存储单元(数组)存放一个线性表叫顺序表
6.2、元素地址计算:location(ai)=location(a0)+i*num location(a+i)=location(ai)+num
注:num是一个元素占用的存储单元个数,location(ai):表示第i个元素的地址。
6.3、顺序表的特点:实现逻辑上的相邻(物理地址相邻) 实现随机存取
6.4、结构的定义:
//数据元素不是简单类型时,可以定义结构体数组 #define maxsize 1000 int data[maxsize]; typedef struct test { int num; char name[20]; char author[10]; char publisher[30]; float price; }card; card library[maxsize];
6.4、用数组实现的ADT表的类型
用数组实现表时,为了适应表的元素类型,将表类型List定义为一个结构体
typedef struct alist *List;//定义alist的含义 typedef struct alist{ int n;//表长度,n=0,表为空 int maxsize;//线性表的最大长度 ListItem *table;//表元素数组 }Alist;
顺序表List的基本运算实现:
1、初始化函数:分配大小为size的空间给表数组table,并返回初始化为空的表