数据结构与算法——线性表
🍓个人主页:bit..
🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题
目录
2.1线性表的定义和特点
2.2 案例引入
2.3 线性表的定义
2.1线性表的定义和特点
线性表是具有相同特新的数据元素的一个有限序列。
列如:
同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。
线性表的例子;
1.分析26个英文字母组成的英文表。
2.分析学生情况登记表
3.某单位历年拥有计算机的数量。
线性表是一种典型的线性结构
2.2 案例引入
1.一元多项式的运算:实现两个多项式加减乘运算。
将每一项系数拿出来用线性
线性表 p=(p0,p1,p2,……,pn)
每一项的指数i隐含在其系数pi的序号中。可以用数组来表示。
eg:
2.图书信息管理系统
需要的功能:查找 插入 删除 修改 排序 计数
总结:
1.线性表中数据元素的类型可以为简单类型,也可以为复杂类型
2.许多实际问题所涉及的基本操作有很大相似性,不应为每个具体应用单独编写一个程序。
3.从具体应用中抽象出共性的逻辑结构和基本操做(抽象数据类型)然后实现其存储结构和基本操作。
2.3 线性表的定义
抽象数据类型线性表示的定义如下:
ADT List{
数据对象:D={ai | ai 属于Elemset,(i=1,2,...,n,n>=0)}
数据关系:R={<ai-1,ai>|ai-1,ai属于D,(i=2,3,...,n)}
基本操作:
InitList(&L); DestoryList(&L);
ListInsert(&l,i,e); ListFElet(&L,i,&e);
.....等等
}ADT List
基本运算:
- InitList(&L):初始化线性表,构造一个空的线性表L。
- DestroyList(&L):销毁线性表,释放为线性表L分配的内存空间。
- ListEmpty(L):判断线性表是否为空表,若L为空表,则返回真,否则返回假。
- ListLength(L):求线性表的长度,返回L中元素的个数。
- DispList(L):输出线性表,当线性表L不为空时顺序输出L中各元素值。
- GetElem(L,i,&。e):按序号求线性表中元素,用e返回L中第i(l≤i≤n)个元素值。
- LocateElem(L,e):按元素值查找,返回L中第一个值为e相等的元素序号。
- ListInsert(&L,i,e):插人元素,在L的第i(l≤i≤n+l)个位置插入一个新元素e。
- ListDelete(&L,i,&e):删除元素,删除L的第i(l≤i≤n)个元素,并用e返回该元素值。
2.4线性表两种基本存储操作
1.顺序存储结构(顺序映像)线性表的顺序表示
2.链式存储结构
顺序存储定义;把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。
映射表示:
线性表的第一个数据元素a1存储位置,乘做线性表的起始位置或者基地址。
线性表的存储必须连续。地址不连续这样是错误的。
线性表顺序存储结构的图示:
顺序表的特点:以物理位置相邻表示逻辑关系,任一元素均可随机存储。
顺序表元素特点:地址连续 依次存放 随机存放 类型相同
线性表达模板:
#define LIST_INIT_SIZE 100 //线性表存储空间初始分配量
typedef struct{
Elem Type elem[LIST_INIT_SIZE];
int length; //当前长度
}sqlist;
例如 图书馆的顺序结构类型定义
#define Maxsize 10000
typedef struct{ //图书信息定义
char no[20] ; //书ISBN
char name[50]; //书名
float price; //价格
}Book;
typedef struct{
book *elem; //存储空间的基地址
int length; //图书表中当前图书个数
}sqList; //图书表的顺序存储结构类型为sqList