【教学课件】第2章线性表.ppt
《【教学课件】第2章线性表.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第2章线性表.ppt(83页珍藏版)》请在三一办公上搜索。
1、2.1 线性表的逻辑结构2.2 线性表的顺序表示和实现2.3 线性表的链接表示和实现2.4 一元多项式的表示及相加,目录,第 二 章 线性表,线性结构特点:,空或者只有一个结点。或者 1、存在唯一的一个被称之为“第一个”的结点。2、存在唯一的一个被称之为“最后一个”的结点。3、除第一个结点之外,每个结点均只有一个前驱结点。4、除最后一个结点之外,每个结点均只有一个后继结点。,2.1 线性表的逻辑结构,线性表(Linear_list)是a1,a2,an,n(0)个数据元素的有限序列。对n0,除了第一个和最后一个元素外,其余各节点有且仅有一个直接前驱和直接后继。特点:同一性 有限性 有序性 n=0
2、 称空表 n0 常记作(a1,a2,an)n:称线性表的表长,1.线性表的定义,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2),i,j,k,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如
3、下:,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2),i,j,k,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行
4、合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2
5、,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 L
6、C,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,
7、6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC
8、,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2
9、,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另
10、一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9),i,j,k,LA(3,5,8,11)LB(2,6,8,9,
11、11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序
12、。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11),i,
13、j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找
14、 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9
15、,11,15,20)LC(2,3,5,6,8,8,9,11,11,15),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5,6,8,8,9,11,11,15,20),i,j,k,LA(3,5,8,11)LB(2,6,8,9,11,15,20)LC(2,3,5
16、,6,8,8,9,11,11,15,20)合并的方法如下:,2.基本操作:插入、删除、查找 e.g:已知线性表 LA 和线性表 LB 中的结点为递增序。将 LA 和 LB 进行合并至 另一线性表 LC,并仍为递增序。,Void Mergelist(List La,list Lb,list/Mergelist La Lb,时间复杂性:和表 LA、LB 中的结点个数(之和)成正比。,合并操作的算法实现,1、物理存储位置的计算:顺序表示:在物理位置上紧靠在一起。如用数组表示线性表。,设第一个结点的存储地址为 LOC(a1),余类推。设每个结点占用 L 个单元。则:,an,ai-1,a2,a1,ai,
17、LOC(ai)=LOC(ai-1)+L=LOC(ai-2)+2L=LOC(ai-(i-1)+(i-1)L=LOC(a1)+(i-1)L,随机存取:访问任何一个数据元素或结点花费同样多时间。,2.2 线性表的顺序表示和实现,an,ai-1,a2,a1,ai,2、在 c 中的表示和实现:,#define MAXSIZE 100typedef struct data type dataMAXSIZE;int len;seqlist;,表示:,建立一个顺序存储的线性表:,seqlist*init_seqlist()seqlist*L;L=malloc(sezeof(seqlist);L-len=-1;
18、(L.len=-1,表示线性表中无数据元素)return L;/init_seq;,主函数调用:Main()Seqlist*L;L=init_seqlist();./生成顺序存/储的线性表,3、插入和删除的时间复杂性分析:,插入(在线性表的第 i 个位置上插入x):,251247893614,123456789,25124799893614,99插入,251247893614,251247893614,251247893614,插第 4 个结点之前,移动 6(41)次。在一般情况下,插在第 i 个结点之前,移动 n-(i-1)次。,3、插入和删除的时间复杂性分析:,插第 4 个结点之前,移动
19、6(41)次。在一般情况下,插在第 i 个结点之前,移动 n-(i-1)次 插在第 1 个结点之前,移动 n 次 插在第 2 个结点之前,移动 n-1 次 插在第 i 个结点之前,移动 n-(i-1)次插在第 n 个结点之前,移动 1 次。插在第 n 个结点之后,移动 0 次。,总共 n+1 种情况,在长度为 n 的线性表中插入一个结点的平均次数为:(n-i+1)/(n+1)=n/2 时间复杂性为 O(n)。,i=1,n,3、插入和删除的时间复杂性分析:,删除(删除线性表的第 i 个结点):,251247893614,123456789,2512473614,2512473614,251247
20、3614,删除第 4 个结点,移动 64 次。在一般情况下,删除第 i 个结点,移动 n-i 次。,删除,3、插入和删除的时间复杂性分析:,删除第 4 个结点,移动 64 次。在一般情况下,删除第 i 个结点,移动 n-i 次 删除第 1 个结点,移动 n-1 次 删除第 2 个结点,移动 n-2 次 删除第 i 个结点,移动 n-i 次删除第 n 个结点,移动 0 次。,总共 n 种情况,在长度为 n 的线性表中删除一个结点的平均次数为:(n-i)/n=(n-1)/2 时间复杂性为 O(n)。,i=1,n,另外,通过 KEY 查找结点,代价 O(n)。查找第 i 个结点,代价O(1)。,3、
21、插入、删除、查找的实现算法:,插入,Int insert_seqlist(seqlist*L,int i,datatype x)if(L-len=MAXSIZE-1)printf(“overflow”);return(-1);/*表空间已满,不能插入*/if(iL-len+1)printf(“Infeasible”);return(0);/*检查插入位置的正确性*/if(j=L-len;j=I;j-)L-dataj+1=L-dataj;/*结点移动*/L-datai-1=x;/*新元素插入*/L-len+;/*表的长度增加*/return(1);/*插入成功,返回*/initList_Sq;线
22、性表的第 i 个结点存于 L-elemi-1 之中。,3、插入、删除、查找的实现算法:,删除,将第i个元素从线性表中去掉步骤:将ai+1an顺序上移 修改len指针(相当于修改表长),使之指向最后一个元素,Int Delete_seqlist(seqlist*L,int i)if(iL-len+1)printf(“No this value of i”);return(0);for(j=i;jlen;j+)L-dataj-1=L-dataj;/*向上移动*/L-len-;return(1);/*删除成功*/,3、插入、删除、查找的实现算法:,查找,查找算法?(同学自己编写),4、线性表应用举例
23、:,(1).将顺序表(a1,a2,an)重新排列为以a1为界的两部分:a1前面的值均比a1小,a1后面的值均比a1大(这里假设数据元素的类型具有可比性,不妨设为整型)。,(2).有顺序表A和B,其元素均按从小到大的升序排列,编写算法将他们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。,顺序存储结构的优点和缺点,优点:1.无需为表示结点间的逻辑关系而增加额外的存储空间;2.可方便地随机存取表中的任一元素。缺点:1.插入或删除运算不方便,除表尾的位置外,在表的其它位置上进行插入或删除操作都必须移动大量的结点,其效率较低;2.由于顺序表要求占用连续的存储空间,存储分配只能预先进行静态分配。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 线性
链接地址:https://www.31ppt.com/p-5658384.html