版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计PPT课件 (2)第10章 指针v15.2 链表的相关概念v15.2 链表的操作C语言程序设计PPT课件 (2)15.2 链表的相关概念v链表是由一个个结点顺序连接起来构成的表,称为链表。其中,结点用来存放元素信息和下一个元素的地址。链表中的元素在逻辑上相邻,在物理上不一定相邻。而数组中的元素逻辑上相邻,在物理上也一定相邻。本节主要讲解链表的基本概念和动态内存分配。C语言程序设计PPT课件 (2)15.1 链表的相关概念v15.1.1 链表链表v1链表链表v链表是由结点连接而成,结点就表示一个元素的信息。链表是由结点连接而成,结点就表示一个元素的信息。链表就是通过地址(指针)将每
2、个结点(元素)连接起链表就是通过地址(指针)将每个结点(元素)连接起来的表。例如,链表中的元素包括来的表。例如,链表中的元素包括A、B、C、D,如图,如图15.1所示。所示。C语言程序设计PPT课件 (2)15.1 链表的相关概念v在图15.1中,链表由4个结点构成,每个结点包括两个域:数据域和指针域。数据域用来存放数据信息,指针域表示地址信息,指向下一个结点的地址。数据域存放的是A、B、C、D。在C语言中,通常用箭头表示结点之间的先后关系,一个结点的指针指向下一个相邻的元素。这样利用指针将结点连接起来的表就构成了链表。C语言程序设计PPT课件 (2)15.1 链表的相关概念v如果要访问链表中
3、的元素,需要先找到第一个结点,为了找到链表的第一个结点,还需要一个指针指向第一个结点,我们称这样的指针为头指针,记作head。另外,最后一个元素D的结点没有其它结点,将最后一个结点的指针域置为NULL。如图15.2所示。C语言程序设计PPT课件 (2)15.1 链表的相关概念v2定义链表的结点v链表是由结点构成,结点包括数据域和指针域。一个结点可以包括一个或多个数据域,因此,需要将结点定义为结构体类型。因为指针域是指向自身一样的结构体类型数据,如图15.2中的元素A所在结点的指针域指向元素B所在的结点,而A和B都是同一个类型。 C语言程序设计PPT课件 (2)15.1 链表的相关概念struc
4、t student/*定义结点类型*/char data; /*数据域*/struct student *next; /*next是指针域,指向结构体类型struct student*/;v其中,指针域是一个指向struct student的结构体指针类型。我们将这种存在指针指向自己的结构体类型称为自引用类型。C语言程序设计PPT课件 (2)15.1 链表的相关概念v如果有如下的结构体类型定义:struct studentint no; /*学号*/char name20; /*姓名*/char addr30;/*地址*/struct student *next;/*next是指向struct
5、 student的指针*/;C语言程序设计PPT课件 (2)15.1 链表的相关概念v这种结点构成的链表如图15.3所示。 C语言程序设计PPT课件 (2)15.1 链表的相关概念v15.1.2 动态存储分配v链表中的结点是动态存储分配的,而不是由系统自动分配的。动态存储分配是在使用前才进行分配内存空间,使用完毕就可以释放内存空间。内存空间的分配和释放由用户自己决定。v1。malloc函数函数动态内存分配函数动态内存分配函数v函数malloc的主要作用是分配一块长度为size的内存空间。函数原型如下:vvoid *malloc(unsigned int size);C语言程序设计PPT课件 (
6、2)15.1 链表的相关概念v函数malloc常常与运算符sizeof配合使用。例如,要分配一个大小为40的int型的内存空间,代码如下:vint *p;vp=(int*)malloc(sizeof(int)*40); C语言程序设计PPT课件 (2)15.1 链表的相关概念v2。free函数动态内存释放函数v函数free的主要作用是将动态分配的内存空间释放。它的函数原型如下: void free(void *p);v其中,参数p指向要释放的内存空间。函数free没有返回值。函数原型malloc和free都在头文件stdlib.h和alloc.h中定义。C语言程序设计PPT课件 (2)15.2
7、 链表的操作v链表的主要操作包括:创建链表、输出链表、链表的查找、链表的插入和链表的删除。15.2.1 链表的创建v链表的创建就是将一个个结点连接在一起。创建链表的步骤如下:v 动态生成结点。v 输入结点的数据。v 将结点连接在一起。C语言程序设计PPT课件 (2)15.2 链表的操作v例如,要将3个字符X、Y和Z依次存放到结点中,构成一般链表。需要先定义一个结点类型,代码如下:struct nodechar ch;struct node *next;ListNode;C语言程序设计PPT课件 (2)15.2 链表的操作v1将第一个字符X插入到链表中v先动态生成一个结点,用p指向该结点。代码如
8、下:vp=(ListNode*)malloc(sizeof(ListNode);v然后将X存放到结点的数据域ch中,代码如下:vp-ch=X;v让头指针head指向第一个结点,代码如下:vhead=p;v这样就将第一个结点的插入到链表中。 C语言程序设计PPT课件 (2)15.2 链表的操作v插入第一个结点的过程如图插入第一个结点的过程如图15.4所示。所示。C语言程序设计PPT课件 (2)15.2 链表的操作v2将第二个字符将第二个字符Y插入到链表中插入到链表中v动态生成一个结点,将字符Y存放到该结点中,代码如下:p=(ListNode*)malloc(sizeof(ListNode);p-
9、ch=Y;v将第2个结点连接在第1个结点之后。代码如下: q-next=p;v让q指向第二个结点,即当前链表的最后一个结点。代码如下: q=p;C语言程序设计PPT课件 (2)15.2 链表的操作v插入第二个结点的过程如图15.5所示。C语言程序设计PPT课件 (2)15.2 链表的操作v3将第三个字符将第三个字符Z插入到链表中插入到链表中v与前两步类似,先动态生成一个结点,并将字符C存放到该结点,代码如下:p=(ListNode*)malloc(sizeof(ListNode);p-ch=Z;v然后将q指向结点*p,代码如下: q-next=p;v因为p指向的结点是最后一个结点,所以将该结点
10、的指针域置为NULL。代码如下: p-next=NULL;C语言程序设计PPT课件 (2)15.2 链表的操作v插入最后一个结点的过程如图插入最后一个结点的过程如图15.6所示。所示。C语言程序设计PPT课件 (2)15.2 链表的操作v15.2.2 链表的输出v链表的输出就是将链表中的各个结点的数据依次输出。输出链表的操作非常简单,定义一个指针变量p,使其指向链表的第一个结点。然后输出p指向的结点,并让p指向下一个结点。依次类推,直到输出所有结点的元素。C语言程序设计PPT课件 (2)15.2 链表的操作v输出链表的函数如下:输出链表的函数如下:void displist(struct no
11、de *h)struct node *p=h;while(p!=NULL)printf(%4c,p-ch);p=p-next;C语言程序设计PPT课件 (2)15.2 链表的操作15.2.3 链表的查找v链表的查找操作就是在链表中查找指定值的元素,如果找到,返回该结点的指针,否则返回NULL。链表的查找操作必须从链表的头指针开始,依次与结点的值进行比较。直到找到结点或到达链表的末尾,查找操作结束。C语言程序设计PPT课件 (2)15.2 链表的操作v链表的查找操作与链表的输出操作是类似的,只是多链表的查找操作与链表的输出操作是类似的,只是多了一个比较的过程。链表的查找操作实现如下:了一个比较的
12、过程。链表的查找操作实现如下:struct node *findnode(struct node *h,char x)struct node *p=h;while(p!=NULL&p-ch!=x)p=p-next;return p;C语言程序设计PPT课件 (2)15.2 链表的操作v15.2.4 链表的插入操作v链表的插入操作是在链表中指定位置插入一个新结点。要将一个结点插入到链表中,需要解决以下两个问题:v(1)查找插入点。v(2)将新结点插入到链表中。C语言程序设计PPT课件 (2)15.2 链表的操作v插入过程如图插入过程如图15.7所示。所示。C语言程序设计PPT课件 (2)
13、15.2 链表的操作v将新结点插入到*r之后需要两步操作,代码如下:p-next=r-next;/*将*p的指针域指向*r的下一个结点*/r-next=p; /*将*r的指针域指向*p*/v说明:在链表中插入新结点并不需要移动链表中的元素,只需要修改指针的指向即可。C语言程序设计PPT课件 (2)15.2 链表的操作15.2.5 链表的删除操作v删除链表中元素值为删除链表中元素值为a的结点,操作过程如图的结点,操作过程如图15.8所示。所示。 C语言程序设计PPT课件 (2)15.2 链表的操作v删除元素值为a的结点的关键代码如下:r=findnode2(h,a);/*查找要删除的结点,返回值r指向要删除结点的前一个结点*/p=r-next; /*p指向要删除的结点*/r-next=p-next; /*删除p指向的结点,使*p脱链*/free(p); /*释放p指向的结点的内存空间*/C语言程序设计PPT课件 (2)15.2 链表的操作15.2.6 链表的应用举例学生信息管理系统【例15.2】建立一个学生信息管理系统,管理系统有一个目录菜单,包括6个选项:v1.建立学生信息链表v2.插入一名新的学生v3.从链表中删除学生v4.在链表中查找学生;v5.在链表中浏览信息;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学港口航道与海岸工程(港口航道设计)试题及答案
- 2025年高职网络安全技术(技术实操训练)试题及答案
- 2025年中职城市轨道交通运营服务(行车组织)试题及答案
- 2025年中职(中医基础)经络识别阶段测试试题及答案
- 禁吸戒毒业务培训课件
- 2025 小学二年级科学上册认识蝌蚪的四肢生长课件
- 光伏质量培训课件教学
- 2025年半年度可持续金融报告
- 云南省部分学校2025-2026学年七年级上学期期中历史试题(含答案)
- 2026山东菏泽曹州医院招聘备考题库及答案详解一套
- 初中语文仿写训练
- 老同学聚会群主的讲话发言稿
- 天然气输气管线阴极保护施工方案
- 高血压问卷调查表
- QC成果提高花岗岩砖铺装质量
- YS/T 416-2016氢气净化用钯合金管材
- GB/T 25156-2010橡胶塑料注射成型机通用技术条件
- GB/T 20878-2007不锈钢和耐热钢牌号及化学成分
- 第六章 亚洲 第一节 概述
- 第六单元作文素材:批判与观察 高一语文作文 (统编版必修下册)
- 全新版尹定邦设计学概论1课件
评论
0/150
提交评论