高考理综试题及答案(全国卷2).ppt
《高考理综试题及答案(全国卷2).ppt》由会员分享,可在线阅读,更多相关《高考理综试题及答案(全国卷2).ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2.3 线性表的链式表示和实现线性表的链式表示和实现 线性链表线性链表 链式存储链式存储:用:用一组任意的存储单元存储一组任意的存储单元存储线性表中的数据元线性表中的数据元素。用这种方法存储的线性表简称素。用这种方法存储的线性表简称线性链表线性链表。存储链表中数据元素的一组任意的存储单元可以是连续的,存储链表中数据元素的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。也可以是不连续的,甚至是零散分布在内存中的任意位置上的。链表中数据元素的逻辑顺序和物理顺序不一定相同。链表中数据元素的逻辑顺序和物理顺序不一定相同。为了表示数据元素为了表示数据元素aiai和
2、和ai+1ai+1之间的逻辑关系,对数据元素之间的逻辑关系,对数据元素aiai来说,除了存储其本身的信息之外,还需存储一个指示其直接后来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(直接后继的存储位置)。这两部分信息组成数据元素继的信息(直接后继的存储位置)。这两部分信息组成数据元素aiai的存储映像,称为的存储映像,称为结点结点(nodenode)。)。链表是通表是通过每个每个结点的指点的指针域将域将线性表的性表的n个个结点按其点按其逻辑次序次序链接在一接在一起的。起的。每一个每一个结点只包含一个指点只包含一个指针域的域的链表,称表,称为单链表或表或线性性链表。表。为操作方
3、便,操作方便,总是在是在链表的第一个表的第一个结点之前附点之前附设一个一个头结点点(头指指针)head指向第一个指向第一个结点。点。头结点的数据域可以不存点的数据域可以不存储任何信息任何信息(或或链表表长度等度等信息信息)。data next图图2-2 链表结点结构链表结点结构data:数据域,存放数据元素信息。:数据域,存放数据元素信息。next:指针域,存放结:指针域,存放结点的直接后继的地址,指针域中存储的信息称为指针或链。点的直接后继的地址,指针域中存储的信息称为指针或链。线性链表线性链表 结点包括两个域:数据域和指针域。结点包括两个域:数据域和指针域。n n个结点连接成个结点连接成一
4、个链表,即为线性表的链式存储结构。一个链表,即为线性表的链式存储结构。线性链表线性链表 单链表的存取必须从头指针开始,头指针指示链表中第一个结点。单链表的存取必须从头指针开始,头指针指示链表中第一个结点。例例1 1、线性表、线性表L=(ZHAO,QIAN,SUN,LI,zhou,wu,zheng,wang)存储地址数据域指针域头指针H3117131925313743LIQIANSUNWANGWUZHAOZHENGZHOU43131NULL3771925HZHAOQIAN SUN LI ZHOU WU ZHENG WANG C语言中用结构指针来描述语言中用结构指针来描述(线性表的单链表存储结构线
5、性表的单链表存储结构)typedef struct LNode ElemType data;/*数据域,保存结点的值数据域,保存结点的值*/struct Lnode *next;/*指针域指针域*/LNode,*LinkList;/*结点的类型结点的类型*/线性链表线性链表a1La2an带头结点的单链表 非空表L带头结点的单链表 空表在单链表中,每个元素的存储位置都包含在其直接前驱结点的信息之中。PP-next指向第2个元素,p-data=a1,p-next-data=a2单链表是非随机存取的存储结构常见的指针操作常见的指针操作 q=p;pa操作前paq操作后 q=p-next;bpa操作前操
6、作后qbpa p=p-next;bpa操作前操作后pba q-next=p;cpbqa操作前操作后qbacp(a)q-next=p-next;(a)xypbqa操作前操作后qbaxyp操作前ypxbqa操作后ypxbqa(b)操作前ypxbqa操作后ypxbqa(b)单链表的基本操作单链表的基本操作取单链表中的第i个元素:对于单链表,不能象顺序表中那样直接按序号i访问结点,而只能从链表的头结点出发,沿链域next逐个结点往下搜索,直到搜索到第i个结点为止。因此,链表是非随机存取结构。设单链表的长度为n,要查找表中第i个结点,仅当1in时,i的值是合法的。单链表的基本操作单链表的基本操作stat
7、us GetElem_L(LinkList L,int i,ElemType&e)/L为带头结点的单链表的头指针 /当第i个元素存在时,其值赋给e,并返回OK,否则返回ERROR p=L-next;j=1;/使p指向第一个结点 while (p&jnext;+j;if (!p|ji)return error;e=p-data;/p为NULL 表示i太大;ji表示i为0 算法2.8移动指针p的频度:in:n次。时间复杂度:O(n)。单链表的基本操作单链表的基本操作单链表的插入 插入运算是将值为e的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。因此,必须首先找到ai-1所在的结点
8、p,然后生成一个数据域为e的新结点q,q结点作为p的直接后继结点。算法描述(算法2.9)status ListInsert_L(LinkList&L,int i,ElemType e)/在带头结点的单链表L的第i个位置插入值为e的结点 p=L;j=0;while (p&jnext;+j;if (!p|ji-1)return ERROR;s=(LinkList)malloc(sizeof(Lnode);s-data=e;s-next=p-next;p-next=s;return ok;链表的长度为n,合法的插入位置是1in。算法的时间主要耗费移动指针p上,故时间复杂度亦为O(n)单链表的基本操作
9、单链表的基本操作单链表的删除单链表的删除 删除单链表中的第删除单链表中的第i个结点。个结点。为了删除第为了删除第i个结点个结点ai,必须找到结点的存储地址。该存储地址是在其直接前,必须找到结点的存储地址。该存储地址是在其直接前趋结点趋结点ai-1的的next域中,因此,必须首先找到域中,因此,必须首先找到ai-1的存储位置的存储位置p,然后令,然后令pnext指指向向ai的直接后继结点,即把的直接后继结点,即把ai从链上摘下。最后释放结点从链上摘下。最后释放结点ai的空间。的空间。设单链表长度为设单链表长度为n,则删去第,则删去第i个结点仅当个结点仅当1 i n时是合法的。则当时是合法的。则当
10、i=n+1时,时,虽然被删结点不存在,但其前趋结点却存在,是终端结点。故判断条件之一是虽然被删结点不存在,但其前趋结点却存在,是终端结点。故判断条件之一是pnext!=NULL。显然此算法的时间复杂度也是。显然此算法的时间复杂度也是O(n)(n)。算法描述算法描述(算法算法2.10)2.10)status LinkListDelete_ L(LinkList&L,int i,ElemType&e)/在在带头结点的点的单链表表L中中删除第除第i个元素,并由个元素,并由e返回其返回其值 p=L;j=0;while (p-next&jnext;+j;if (!(p-next)|ji-1)return
11、 error;q=pnext;pnext=qnext;free(q);return ok;单链表是一种动态结构,建立线性表的链式存储结构的过程是一个动态生成链表的过程 单链表的基本操作单链表的基本操作逆向建立单链表(算法逆向建立单链表(算法2.112.11)Viod CreateList_L(LinkList&L,int n)/逆位序输入n个元素的值,建立带表头结点的单链线性表L。L=(LinkList)malloc(sizeof(LNode);L-next=NULL;for(i=n;i0;-i)p=(LinkList)malloc(sizeof(LNode);scanf(&p-data);p
12、-next=L-nxet;L-next=p;时间复杂度为O(n)单链表的合并单链表的合并 设有两个有序的有两个有序的单链表,它表,它们的的头指指针分分别是是La、Lb,将它,将它们合并合并为以以Lc为头指指针的有序的有序链表。合并前表。合并前的示意的示意图如如图2-4所示。所示。15 图图2-4 两个有序的单链表两个有序的单链表La,Lb的初始状态的初始状态-2 4 9 Lb pb-7 3 12 23 La Lcpapc pa,pb分别是待考察的两个链表的当前结点,分别是待考察的两个链表的当前结点,pc指向指向Lc表中最后一个结点。表中最后一个结点。合并了合并了值为-7,-2的的结点后示意点后
13、示意图如如图2-5所示。所示。图图2-5 合并了值为合并了值为-7,-2的结点后的状态的结点后的状态-2 4 9 15 Lb pcpbLc-7 3 12 23 La pa算法说明算法说明 算法中算法中pa,pb分别是待考察的两个链表的当前结分别是待考察的两个链表的当前结点,点,pc指向指向Lc表中最后一个结点。表中最后一个结点。算法描述(算法算法描述(算法2.122.12)Void MergeList_L(LinkList&La,LinkList&Lb,LinkList&Lc)/已知单链线性表La和Lb的元素按非递减排列 /归并La和Lb得到新的单链线性表Lc也按值非递减排列 pa=La-ne
14、xt;pb=Lb-next ;Lc=pc=La;while(pa&pb)if (pa-datadata)pc-next=pa;pc=pa;pa=pa-next ;else pc-next=pb;pc=pb;pb=pb-next ;pc-next=pa?pa:pb;free(Lb);/释放Lb头结点 循环链表循环链表 循循环链表表(Circular Linked List):是一种是一种头尾相接的尾相接的链表。其特点是最后一个表。其特点是最后一个结点的指点的指针域指向域指向链表的表的头结点,整个点,整个链表的指表的指针域域链接成一个接成一个环。从循从循环链表的任意一个表的任意一个结点出点出发都可
15、以找到都可以找到链表中表中的其它的其它结点,使得表点,使得表处理更加方便灵活。理更加方便灵活。图2-6是是带头结点的点的单循循环链表的示意表的示意图。空表空表图图2-6 单循环链表示意图单循环链表示意图非空表非空表a1 a2 anH H 有时,若在循环链表中设立尾指针而不设头指针,有时,若在循环链表中设立尾指针而不设头指针,可使某些操作简化。可使某些操作简化。循环链表的操作循环链表的操作 对于单循环链表,除链表的合并外,其它的操作和对于单循环链表,除链表的合并外,其它的操作和单线性链表基本上一致,仅仅需要在单线性链表操作算单线性链表基本上一致,仅仅需要在单线性链表操作算法基础上作以下简单修改:
16、法基础上作以下简单修改:判断是否是空链表:判断是否是空链表:head-next=head;判断是否是表尾结点:判断是否是表尾结点:p-next=head;ABB,A 双向链表双向链表 双向双向链表表(Double Linked List):指的是构成指的是构成链表的表的每个每个结点中点中设立两个指立两个指针域:一个指向其直接前域:一个指向其直接前趋的指的指针域域prior,一个指向其直接后,一个指向其直接后继的指的指针域域next。这样形形成的成的链表中有两个方向不同的表中有两个方向不同的链,故称,故称为双向双向链表表。和和单链表表类似,双向似,双向链表一般增加表一般增加头指指针也能使双也能使
17、双链表上的某些运算表上的某些运算变得方便。得方便。将将头结点和尾点和尾结点点链接起来也能构成循接起来也能构成循环链表,并表,并称之称之为双向循双向循环链表。表。双向双向链表是表是为了克服了克服单链表的表的单向性的缺陷而引入向性的缺陷而引入的。的。1 双向链表的结点及其类型定义双向链表的结点及其类型定义 双向双向链表的表的结点的点的类型定型定义如下。其如下。其结点形式如点形式如图2-7所示所示,带头结点的双向点的双向链表的形式如表的形式如图2-8所示所示。typedef struct Dulnode ElemType data;struct Dulnode *prior,*next;DulNod
18、e,*DulinkList;elementnextprior图图2-7 双向链表结点形式双向链表结点形式非空双向链表非空双向链表heada2a1an空双向链表空双向链表head图图2-8 带头结点的双向链表形式带头结点的双向链表形式 双向链表双向链表非空双向循环链表链表非空双向循环链表链表heada2a1an空双向循环链表空双向循环链表head图图2-8 带头结点的双向循环链表形式带头结点的双向循环链表形式 双向双向链表表结构具有构具有对称性,称性,设p指向双向指向双向链表中的某一表中的某一结点,点,则其其对称性可用下式描述:称性可用下式描述:p-prior-next=p=p-next-pri
19、or;结点点p的存的存储位置存放在其位置存放在其直接前直接前趋结点点p-prior的的直接直接后后继指指针域域中,同中,同时也存放在也存放在其直接后其直接后继结点点p-next的的直接直接前前趋指指针域域中。中。2 双向链表的基本操作双向链表的基本操作(1)双向双向链表的插入表的插入 将将值为e的的结点插入双向点插入双向链表中。插表中。插入前后入前后链表的表的变化如化如图2-9所示。所示。算法2.18 status ListInsert_Dul(DuLinkList&L,int i,ElemType e)if(!(p=GetElemP_Dul(L,i)return error;if(!(s=(
20、DuLinkList)malloc(sizeof(DuLNode)return error;s-data=e;s-prior=p-prior;p-prior-next=s;s-next=p;p-pror=s;return ok;Sepai-1ai图图2-9 双向链表的插入双向链表的插入1234(2)双向双向链表的表的结点点删除除 设要要删除除的的结点点为p,删除除时可以不引入新的可以不引入新的辅助指助指针变量,可以直接先量,可以直接先断断链,再,再释放放结点。点。Stutas ListDelete_Dul(DulLinkList&L,int i,ElemType&e)Stutas ListDe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高考 试题 答案 全国卷
限制150内