算法与数据结构
线性表
定义:具有相同特性(n个)的数据元素的一个有限序列。
a1(起始节点仅一个),a2,…ai-1,ai,ai+1,…an(终端节点仅有一个)
(1~n表示元素在表中的位置,n为表长(n=0为空表))
总结:同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。
eg:
线性表A=((7,0),(3,1),(9,8),(5,17));
线性表B=((8,1),(22,7),(9,8));
创建一个新数据C
分别从头遍历比较a和b的每一项
- 指数相同,对应系数相加,若其和不为零,则在C中增加一个新项
- 指数不同,则将指数较小的项复制到中
- 一个多项式已遍历完毕时,将另一个剩余项依次复制到C中即可。
线性表中数据元素可能为简单类型,也可以为复杂类型
线性表的类型定义
ADT List{
数据对象
数据关系
基本操作
}ADT List
InitList(&L);
DestroyList(&L);
ClearList(&L);
LIstEmpty(L);//判断是否为空
ListLength(L);//返回线性表L中的数据元素个数。
GetElem(L,i,&e);//获取线性表的元素 1<=i<=ListLength(L);
LocateElem(L,e,compare());//
ListTraverse(&L,visited());//线性表的遍历
线性表的两种存储结构
- 顺序存储结构
- 链式存储结构
顺序表示和实现
定义:逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。
顺序表:
- 地址连续
- 依次存放
- 随机存取
- 类型相同
可以用一维数组表示顺序表
线性表表长可变,但数组长度不可动态定义
=》用一个变量表示顺序表的长度属性。
#define LIST_INIT_SIZE 100//线性表存储空间的初始分配量
typedef struct{
ElemType elem[LIST_INIT_SIZE ];
int Length;//当前长度
}SqList;//两个变量,定义为结构类型
eg:图书表的顺序结构定义:
#define MAXSIZE 10000//可修改
typedef struct{//图书信息定义
char no[20];//图书ISBN
char name[50];//图书名字
float price;//图书价格
}Book;
typedef struct{
Book*elem;//存储空间的基地址(类型可修改)
int length;//图书表当前图书个数
};//图书表的顺序存储结构类型为SqList;