线性表的定义和特点
1.线性表是具有相同特性的数据元素的有限序列。
数据元素的个数n定义为表的长度
当n=0 为空表
2.逻辑特征:在非空的线性表,有且只有一个开始结点,没有直接前趋,有且只有一个直接后继。
稀疏多项式的运算
表示出a,b表中的数据,再创建一个新的数组C
指数相同,对于系数相加,其和不为零,则在C中增加一个新项
指数不相同,则将指数较小的项复制到C中
顺序存储结构存在问题:存储空间分配不灵活,运算空间复杂度高。
3.线性表的抽象类型
InitList(&L)
操作结果:构造一个空的线性表L
DestroyList(&L)
操作结果:销毁线性表L
ClearList(&L)
操作结果:将线性表L重置为空表
ListEmpty(L)
操作结果:若线性表L为空表,返回TRUE,否则返回FALSE.
ListLength(L)
初始条件:线性表L已经存在
操作结果:返回线性表L中的数据元素个数
GetElem(L,i,&e)
初始条件:线性表L已存在,1<=i<=ListLength(L)
操作结果:用e返回线性表L第i个数据元素的值
LocateElem(L,e,compare())
初始条件:线性表L已经存在,compare()是数据元素判定函数
操作结果:返回L中第1个与e满足compare()的数据元素的位序。若这样的元素不存在则返回值为0
PriorElem(L,cur_e,&pre_e)
初始条件:线性表L已经存在
操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无意义
NextElem(L,cur_e,&next_e)
初始条件:线性表L已经存在
操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无意义
ListInsert(&L,i,e)
初始条件:线性表已存在,1<=i<=ListLength(L)+1
操作结果:在L的第i个位置之前插入新的数据元素e,L的长度加一
ListDelete(&L,i,e)
初始条件:线性表已存在,1<=i<=ListLength(L)
操作结果:删除L的第i个元素,并用e返回其值,L的长度减一
ListTraverse(&L,visited())
初始条件:线性表L已经存在
操作结果:依次对线性表中的每个元素都调用visited()
4.线性表的顺序表示和实现
顺序存储结构和链式存储结构
顺序存储结构(顺序映像):
把逻辑上相邻的逻辑元素也存储在物理上相邻的存储单元上
依次存储,中间没有空出存储单元是顺序存储结构。知道某个元素的存储位置便可以知道其他的元素位置。
5.
顺序表元素:地址连续,依次存放,随机存取,类型相同
可用一维数组表示顺序表。
线性表可变(删除),数组长度不可动态定义。
一维数组定义方式:
类型说明符 数组名【常量表达式】
int a[10];//常量表达式中可包含常量和符号常量,不能包含变量。即C语言不允许对数组的大小作动态定义
类如 用一变量表示顺序表的长度属性
#define LIST_INIT_SIZE 100//线性表存储空间的初始分配量
typedef struct{
ElemType elem[LIST_INIT_SIZE];
int length;//当前长度
}SqList;
多项式的顺序存储类型定义
图书表的顺序存储结构类型定义