首页 数据结构_线性表

数据结构_线性表

举报
开通vip

数据结构_线性表nullnull第二章 常用数据结构及其运算*2.2 线 性 表2.2.1 线性表的定义和运算线性表的概念 线性表的逻辑结构是n个数据元素的有限序列: L=(a1, a2 ,...,an) L为线性表,ai(i=1,...,n)是属于某数据对 象的元素,n为线性表的长度(n≥0),n=0的表称为空表。 2. 线性表的定义 L=(D,R) null第二章 常用数据结构及其运算*3. 线性表的结构特点 表中的数据元素为同一数据类型 数据元素之间是线性关系 每个元素有且只有一个前趋...

数据结构_线性表
nullnull第二章 常用数据结构及其运算*2.2 线 性 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 2.2.1 线性表的定义和运算线性表的概念 线性表的逻辑结构是n个数据元素的有限序列: L=(a1, a2 ,...,an) L为线性表,ai(i=1,...,n)是属于某数据对 象的元素,n为线性表的长度(n≥0),n=0的表称为空表。 2. 线性表的定义 L=(D,R) null第二章 常用数据结构及其运算*3. 线性表的结构特点 表中的数据元素为同一数据类型 数据元素之间是线性关系 每个元素有且只有一个前趋元素(第一个元素除外),每个元素有且只有一个后继元素(最后一个元素除外)2.2.1 线性表的定义和运算2.2 线 性 表null第二章 常用数据结构及其运算*有序表与无序表的概念 若线性表中的数据元素相互之间可以比较,且ai≥ai+1 ,i=2,3,...,n(或ai≤ai+1 ,i=1,2,...,n-1),则称该线性表为有序表,否则称为无序表。 线性表的基本运算 插入、删除、查找、排序等。(按位置、按值)2.2.1 线性表的定义和运算2.2 线 性 表null第二章 常用数据结构及其运算*2.2.2 顺序存储线性表(顺序表)一、顺序存储结构  用一组地址连续的存储单元存放线性表的数据元素(也称为向量式存储结构)  该结构用高级语言中的一维数组类型表示。 例如:可用一维数组A[n]来存储线性表: (a1, a2 ,...,an)。  地址计算: addr(ai)=addr(a1)+(i-1)*L  特点:随机存储结构(查找方便)。2.2 线 性 表null第二章 常用数据结构及其运算*例:addr(a4) = addr(a1) + (i-1)×L = 2000H+(4-1)×1=2003Hnull第二章 常用数据结构及其运算*二、顺序存储结构的插入与删除 1.插入 1)概念:有线性表(a1,a2 ,...,an),长度为n,要在第i-1与第i个元素之间插入一个新元素。使得线性表变为:(a1,a2 ,... ai-1,x, ai,...,an), 长度为n+1。 2)插入过程:将ai至an依次后移一个位置(共移动n-i+1个元素),然后将新元素插入在第i个位置上(合法位置:1<=i<=n+1)。请参见教材27页图2-3所示。2.2 线 性 表2.2.2 顺序存储线性表null第二章 常用数据结构及其运算*3)算法描述 int InsertList(L[m],n,i,x) //形式参数 { if (i<1 || i>n+1) return(0); //位置非法 for (j=n;j>=i;j--) L[j+1]=L[j]; //移动元素 L[i]=x; //插入元素 n++; //长度加1 return(1); //执行成功,返回 }2.2 线 性 表2.2.2 顺序存储线性表null第二章 常用数据结构及其运算*2. 删除 1)概念:删除第i个位置上的元素,使线性表的长度由n变为n-1。 2)删除过程:ai+1~an依次前移一个位置(共移动n-i个元素) 。(合法位置:1<=i<=n)参见教材27页图2-4所示。2.2 线 性 表2.2.2 顺序存储线性表null第二章 常用数据结构及其运算*3)算法描述 int DeleteList(L[m],n,i) { if (i<1 || i>n) return(0); //参数不合法 for (j=i;j<=n-1;j++) L[j]=L[j+1]; //前移 n--; //表长减1 return(1); }2.2 线 性 表2.2.2 顺序存储线性表null第二章 常用数据结构及其运算*运算的时间分析  在插入和删除运算中,时间主要消耗在移动元素上。  设pi-在第i个元素前插入一个元素的概率,则在长度为n的线性表中插入一个元素所需的平均移动次数为: 2.2 线 性 表2.2.2 顺序存储线性表null第二章 常用数据结构及其运算*在等概率情况下,pi=1/(n+1),则有: 同理,删除时有: 在等概率情况下,qi=1/n,则有:2.2 线 性 表2.2.2 顺序存储线性表问题:顺序表插入、删除的时间复杂度?O(n)null第二章 常用数据结构及其运算* 4.顺序表特点:  优点:存储效率高、查找方便。  缺点: 1)插入删除代价高(插入或删除一个元素,平均需要移动表中一半的元素),仅适用于不经常进行插入和删除运算以及表中元素相对稳定的场合。 2)要求连续存储区,管理不灵活,元素删除后不能释放空间。2.2 线 性 表2.2.2 顺序存储线性表null第二章 常用数据结构及其运算*2.2 线 性 表2.2.2 顺序存储线性表三、顺序存储结构的应用举例 1.约瑟夫环问题 设有n个人围坐一圆桌,现从第S个人开始报数,数到第m个人出列,然后从下一个人重新报数,数到第m个人又出列,……直到全部出列为止。对任意给定n、s、m,求出列得到的n个人的出列顺序表。null第二章 常用数据结构及其运算*2.2 线 性 表 解:(1) 置初值 S1<-S, ( S1=1) (2) 报数出列 循环 i 以(-1)为步长从 n 到 2 执行 S1 <- (S1+m-1) MOD i 若S1=0,则S1<-i ; W <- P[S1] ; // W记录出列者 循环 j 从S1到 (i-1) 执行 P[j] <- P[j+1] ; P[i] <- W ; //前移 (3) 逆转向量 循环 k 从 1 到 [n/2](向下取整),执行 W <- P[x]; P[k] <- P[n-k+1]; P[n-k+1] <- W (4) 算法结束n=8, s=1, m=4……null第二章 常用数据结构及其运算*2.2 线 性 表2.2.2 顺序存储线性表三、顺序存储结构的应用举例 2.顺序表合并 将两个有序顺序表A(有m个元素)和B(有n个元素),合并为一个有序线性表C。null第二章 常用数据结构及其运算*2.2 线 性 表解:LINK (A, m, B, n, C) { i=0; j=0; t=0; k=0; while (i B[j]) C[k++]=B[j++]; else { C[k++]=B[j++]; //相等者只保存一个 i++; } } if ( i= =m) //B未完,将B余下的元素赋给C for (t=j; tdata); s->next=NULL; //生成结点并赋值 if (h==NULL) h=s; else pre->next=s; pre=s; //结点指针链接 } return(h); //返回链表头指针 }2.2.3 线性链表2.2 线 性 表三、单链表 3.线性链表的建立(补充)null第二章 常用数据结构及其运算* 1)问题描述:在值为a的结点前插入一个值为x的结点。若链表为空,则x成为其头结点;若表中无a元素,则将x插入表尾。2.2.3 线性链表2.2 线 性 表三、单链表 4.插入运算null第二章 常用数据结构及其运算*2)算法描述 InsertList(head,a,x) { GETNODE(p); data(p) <- x; //取得一个新结点p if (head==nil) then { //空表 head=p; next(p) <- nil; return; } if (data(head)==a)then{ //a为头结点 next(p) <- head; head <- p; return; } q=head; while (next(q)!=nil) && data(next(q))!=a) q <- next(q); //查找a之前的结点q next(p) <- next(q); next(q) <- p; //完成插入 }2.2.3 线性链表2.2 线 性 表null第二章 常用数据结构及其运算* 1)问题描述:将值为a的结点删除。2.2.3 线性链表2.2 线 性 表三、单链表 5.删除运算null第二章 常用数据结构及其运算*2)算法描述 DeleteList(head,a) { if (head==nil) return; //空表 if (data(head)==a)then{ //a为头结点 p<-head; head<-next(head); RET(p); return; } LOOKFOR(head,a,q); if (next(q)= =nil) then {return;} p<-next(q); next(q)<-next(p); RET(p); //完成删除 return; }2.2.3 线性链表2.2 线 性 表null第二章 常用数据结构及其运算* 2.2.3 线性链表2.2 线 性 表三、单链表 5.算法运算时间分析 在单链表中插入或删除一个结点时,仅需改变 一个或两个指针,而无需移动元素。null第二章 常用数据结构及其运算* 1)在链表的第一个结点之前附加一个头结点2.2.3 线性链表2.2 线 性 表四、线性链表的其他形式 1.带头结点的线性链表 头结点: 数据域-不 用,或用于存放其它信息,如表长。 指针域-指向链表的第一个结点。null第二章 常用数据结构及其运算* 2)头结点的用处:可简化算法的形式,例如在插入运算中,当表空时尚有头结点存在,因此头指针非空,当a为表中第一个元素时,因有头结点存在,则在a结点之前插入一元素时不必修改头指针。2.2.3 线性链表2.2 线 性 表null第二章 常用数据结构及其运算* 表中最后一个结点指向表的第一个结点,整个链表形成一个环。(只要给定循环链表中任一结点的地址,就可以查遍表中所有的结点,而不必从头指针开始)2.2.3 线性链表2.2 线 性 表四、线性链表的其他形式 2.循环链表null第二章 常用数据结构及其运算*  优点:提高查找效率  思考:如何判断循环链表的表尾? (单链表:判断指针域为空)2.2.3 线性链表2.2 线 性 表四、线性链表的其他形式 2.循环链表null第二章 常用数据结构及其运算* 逻辑结构:2.2.3 线性链表2.2 线 性 表四、线性链表的其他形式 3.双向链表null第二章 常用数据结构及其运算*2.2.3 线性链表2.2 线 性 表四、线性链表的其他形式 3.双向链表 特点:一个结点有两个指针域,容易找到前驱。  双向链表的插入:在P结点之后插入值为y的结点GETNODE(q); data(q)<-y; next(q)<-next(p); next(p)<-q; prior(next(q))<-q; prior(q)<-p;null第二章 常用数据结构及其运算*2.2.3 线性链表2.2 线 性 表四、线性链表的其他形式 3.双向链表 双向链表的删除:删除结点P。next(prior(p))<-next(p); prior(next(p))<-prior(p); RET(p);null第二章 常用数据结构及其运算*2.2.3 线性链表2.2 线 性 表五、链表应用举例 1.一元多项式相加 结点结构:每一个非零项构成链表中的一个结点, 结点由两个数据域和一个指针域构成:null第二章 常用数据结构及其运算* 链表结构:采用带头结点的线性链表表示多项式A(x)、B(x),相加后结果在线性链表C(x)中。  运算过程:A(x)-头指针ha, p的初始位置指向第一项。 B(x)-头指针hb, q的初始位置指向第一项。 比较p、q所指结点中的指数项,若: exp(p)exp(q),则q所指的结点为C(x)中的一项,令p 指针后移一个结点; exp(p)==exp(q),则将两个结点中的系数相加,当和不为 零时,修改p结点中的系数,释放q结点; 否则,删去p结点,同时释放p、q结点。2.2.3 线性链表2.2 线 性 表null第二章 常用数据结构及其运算*AddPoly(ha,hb) { p<-next(ha); q<-next(hb); pre=ha; hc=ha; //有关指针变量赋初值 while (p!=nil && q!=nil){ if(exp(p)exp(q)){ //大于 u<-next(q); next(q)<-p; next(pre)<-q; pre<-q; q<-u; } if (exp(p)=exp(q)){ //等于 x<-coef(p)+coef(q); if (x!=0){ coef(p)<-x; pre<-p; } else{ next(pre)<-next(p); RET(p); } p<-next(pre); u<-q; q<-next(q); RET(u); } } if (q!=nil) next(pre)<-q;//剩余 结点链接 RET(hb); }null第二章 常用数据结构及其运算*2.2.3 线性链表2.2 线 性 表五、链表应用举例 2.在带表头结点的单链表结构上查找值为x的结点LOOKFOR(head, x, p) { p<-next(head); for( ; p!=nil && dada(p)!=x) p<-next(p); return; }null第二章 常用数据结构及其运算*2.2.3 线性链表2.2 线 性 表五、链表应用举例 3.将两个有序单链表合并为一带表头的有序单链表Merge (P1, P2) { GETNODE(ch); p<-ch; next(p)<-nil; while((P1!=nil)&&(P2!=nil)) { if(data(P1)
本文档为【数据结构_线性表】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_853738
暂无简介~
格式:ppt
大小:890KB
软件:PowerPoint
页数:0
分类:其他高等教育
上传时间:2010-12-29
浏览量:87