单链表PPT格式课件下载.ppt

上传人:b****1 文档编号:14332207 上传时间:2022-10-22 格式:PPT 页数:19 大小:749.50KB
下载 相关 举报
单链表PPT格式课件下载.ppt_第1页
第1页 / 共19页
单链表PPT格式课件下载.ppt_第2页
第2页 / 共19页
单链表PPT格式课件下载.ppt_第3页
第3页 / 共19页
单链表PPT格式课件下载.ppt_第4页
第4页 / 共19页
单链表PPT格式课件下载.ppt_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单链表PPT格式课件下载.ppt

《单链表PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《单链表PPT格式课件下载.ppt(19页珍藏版)》请在冰豆网上搜索。

单链表PPT格式课件下载.ppt

,指针域:

存储直接后继的存储位置,5,4)头指针、头结点和首元结点的区别,头指针,头结点,首元结点,头指针是指向链表中第一个结点(或为头结点、或为首元结点)的指针;

头结点是在链表的首元结点之前附设的一个结点;

数据域内只放空表标志和表长等信息,它不计入表长度。

首元结点是指链表中存储线性表第一个数据元素a1的结点。

示意图如下:

6,答:

讨论1.在链表中设置头结点有什么好处?

讨论2.如何表示空表?

头结点即在链表的首元结点之前附设的一个结点,该结点的数据域可以为空,也可存放表长度等附加信息,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理,编程更方便。

答:

无头结点时,当头指针的值为空时表示空表;

有头结点时,当头结点的指针域为空时表示空表。

头结点不计入链表长度!

7,讨论:

链表的数据元素有两个域,不再是简单数据类型,编程时该如何表示?

因每个结点至少有两个分量,且数据类型通常不一致,所以要采用结构数据类型。

以26个字母的链表为例,每个结点都有两个分量:

设每个结点用变量node表示,其指针用p表示,两个分量分别用data和*next表示,这两个分量如何赋值?

方式1:

直接表示为node.dataa;

node.next=q方式2:

p指向结点首地址,然后p-data=a;

p-next=q;

方式3:

p指向结点首地址,然后(*p).data=a;

(*p).nextq,8,设p为指向链表的第i个元素的指针,则第i个元素的数据域写为,指针域写为。

练习:

p-data,ai的值,p-next,ai+1的地址,附1:

介绍C的三个有用的库函数/算符(都在中):

sizeof(x)计算变量x的长度(字节数);

malloc(m)开辟m字节长度的地址空间,并返回这段空间的首地址;

free(p)释放指针p所指变量的存储空间,即彻底删除一个变量。

9,sizeof(x)计算x的长度malloc(m)开m字节空间free(p)删除一个变量,问1:

自定义结构类型变量node的长度m是多少?

问2:

结构变量node的首地址(指针p)是多少?

问3:

怎样删除结构变量node?

msizeof(node)/单位是字节,p(node*)malloc(m),free(p)/只能借助node的指针删除!

P-data=a;

p-next=q,10,对于指向结构类型的指针变量,可说明为:

node*p,*q;

/或用structstudent*p,*q;

/注:

上面已经定义了node为用户自定义的student类型。

类型定义和变量说明可以合写为:

typedefstructstudent/student是自定义结构类型名称chardata;

/定义数据域的变量名及其类型structstudent*next;

/定义指针域的变量名及其类型node,*pointer;

/node是student结构类型的类型替代,*pointer是指针型的student结构类型的替代,也是数据类型*/,附2:

补充结构数据类型的C表示法,11,单链表的存储结构如下,typedefstructLnodeElemTypedata;

/数据域structLnode*next;

/指针域Lnode,*LinkList;

/*LinkList为Lnode类型的指针,如何具体编程来建立和访问链表?

链表的实现,12,2.链表的实现,

(1)单链表的建立和输出

(2)单链表的修改(3)单链表的插入(4)单链表的删除,13,

(1)单链表的建立和输出,例:

用单链表结构来存放26个英文字母组成的线性表(a,b,c,z),请写出C语言程序。

实现思路:

先开辟头指针,然后陆续为每个结点开辟存储空间并及时赋值,后继结点的地址要提前送给前面的指针。

先挖“坑”,后种“萝卜”!

14,#include#includetypedefstructnodechardata;

structnode*next;

node;

node*p,*q,*head;

/一般需要3个指针变量intn;

/数据元素的个数intm=sizeof(node);

/*结构类型定义好之后,每个变量的长度就固定了,m求一次即可*/,将全局变量及函数提前说明:

15,新手特别容易忘记!

inti;

head=(node*)malloc(m);

/m=sizeof(node)前面已求出p=head;

for(i=1;

idata=i+a-1;

/第一个结点值为字符ap-next=(node*)malloc(m);

/为后继结点“挖坑”!

p=p-next;

/让指针变量P指向后一个结点p-data=i+a-1;

/最后一个元素要单独处理p-next=NULL;

/单链表尾结点的指针域要置空!

voidbuild()/字母链表的生成。

要一个个慢慢链入,16,p=head;

while(p)/当指针不空时循环,仅限于无头结点的情况printf(%c,p-data);

p=p-next;

/让指针不断“顺藤摸瓜”,讨论:

要统计链表中数据元素的个数,该如何改写?

sum+;

sum=0;

voiddisplay()/*字母链表的输出*/,17,

(2)单链表的修改(或读取),思路:

要修改第i个数据元素,必须从头指针起一直找到该结点的指针p,然后才能执行p-data=new_value。

修改第i个数据元素的操作函数可写为:

StatusGetElem_L(LinkListL,inti,ElemType/GetElem_L,缺点:

想寻找单链表中第i个元素,只能从头指针开始逐一查询(顺藤摸瓜),无法随机存取。

18,在链表中插入一个元素X的示意图如下:

链表插入的核心语句:

Step1:

s-next=p-next;

Step2:

p-next=s;

p-next,s-next,思考:

Step1和2能互换么?

结点X的生成方式:

s=(node*)malloc(m);

s-data=X;

s-next=?

(3)单链表的插入,19,在链表中删除某元素b的示意图如下:

删除动作的核心语句(要借助辅助指针变量q):

q=p-next;

/首先保存b的指针,靠它才能找到c;

p-next=q-next;

/将a、c两结点相连,淘汰b结点;

free(q);

/彻底释放b结点空间,p-next,思考:

省略free(q)语句行不行?

(p-next)-next,q,(4)单链表的删除,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1