《第09章结构.ppt》由会员分享,可在线阅读,更多相关《第09章结构.ppt(120页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Wenzhou University Wenzhou University 1The C Programming LanguageThe C Programming Language程序设计基础程序设计基础程序设计基础程序设计基础 The C Programming LanguageWenzhou University Wenzhou University 2The C Programming LanguageThe C Programming Language本章要点本章要点结构、结构变量和结构成员变量结构、结构变量和结构成员变量如何引用结构成员变量,结构变量如何作如何引用结构成员变量,结构
2、变量如何作为函数参数使用为函数参数使用结构的嵌套结构的嵌套如何定义和使用结构数组如何定义和使用结构数组结构指针作为函数的参数结构指针作为函数的参数Wenzhou University Wenzhou University 3The C Programming LanguageThe C Programming Language结构结构结构是一个或多个变量的集合,这些变量结构是一个或多个变量的集合,这些变量可能是不同的类型,为了处理的方便而将可能是不同的类型,为了处理的方便而将这些变量组织在一个名字之下。这些变量组织在一个名字之下。由于结构将一组相关的变量看做一个单元由于结构将一组相关的变量看做
3、一个单元而不是各自独立的实体,因此结构有助于而不是各自独立的实体,因此结构有助于组织复杂的数据。组织复杂的数据。Wenzhou University Wenzhou University 4The C Programming LanguageThe C Programming Language一、实例导入一、实例导入Wenzhou University Wenzhou University 5The C Programming LanguageThe C Programming Language例例9.1 求二维平面上两点间的距离。求二维平面上两点间的距离。#include#includest
4、ruct pointdouble x;double y;int main()struct point p1,p2;double dist;scanf(%lf%lf%lf%lf,&p1.x,&p1.y,&p2.x,&p2.y);dist=sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);printf(%.2fn,dist);return 0;Wenzhou University Wenzhou University 6The C Programming LanguageThe C Programming Language例例9.2 编写编写对
5、候选人得票进行统计的程序。对候选人得票进行统计的程序。设有设有10个投票人,个投票人,3个候选人个候选人,每次输入一个每次输入一个得票的候选人的名字得票的候选人的名字,要求最后输出各人的要求最后输出各人的得票结果。得票结果。struct personchar name20;int count;candidate3=Li,0,Zhang,0,Fun,0;Wenzhou University Wenzhou University 7The C Programming LanguageThe C Programming Language#include#include struct personch
6、ar name20;int count;candidate3=Li,0,Zhang,0,Fun,0;Wenzhou University Wenzhou University 8The C Programming LanguageThe C Programming Languageint main()int i,j;char candi_name20;for(i=0;i10;i+)scanf(%s,candi_name);for(j=0;j3;j+)if(strcmp(candi_name,candidatej.name)=0)candidatej.count+;printf(n);for(i
7、=0;i3;i+)printf(%5s:%dn,candidatei.name,candidatei.count);return 0;Wenzhou University Wenzhou University 9The C Programming LanguageThe C Programming Language二、结构的基本知识二、结构的基本知识结构是用其他类型的对象构造出来的派生结构是用其他类型的对象构造出来的派生数据类型。例如,点是最基本的对象,假数据类型。例如,点是最基本的对象,假设用设用x与与y坐标表示它,可以采用结构存放坐标表示它,可以采用结构存放这两个坐标,其声明如下:这两个坐
8、标,其声明如下:struct pointdouble x;double y;Wenzhou University Wenzhou University 10The C Programming LanguageThe C Programming Language(1)关键字)关键字struct引入结构声明。引入结构声明。(2)结构声明由包含在花括号内的一系)结构声明由包含在花括号内的一系列声明组成。列声明组成。(3)关键字)关键字struct后面的名字是可选的,后面的名字是可选的,称为结构标记(这里是称为结构标记(这里是point)。结构标)。结构标记用于为结构命名,在定义之后,结构标记用于为结
9、构命名,在定义之后,结构标记就代表花括号内的声明。记就代表花括号内的声明。(4)结构中定义的变量称为成员。)结构中定义的变量称为成员。说明:说明:Wenzhou University Wenzhou University 11The C Programming LanguageThe C Programming Language(5)结构成员、结构标记和普通变量)结构成员、结构标记和普通变量(即非成员)可以采用相同的名字,它们(即非成员)可以采用相同的名字,它们之间不会冲突,因为通过上下文分析总可之间不会冲突,因为通过上下文分析总可以对它们进行区分。以对它们进行区分。(6)不同结构中的成员可以
10、使用相同的)不同结构中的成员可以使用相同的名字,但是,从编程风格方面来说,通常名字,但是,从编程风格方面来说,通常只有密切相关的对象才会使用相同的名字。只有密切相关的对象才会使用相同的名字。说明:说明:Wenzhou University Wenzhou University 12The C Programming LanguageThe C Programming Language1、结构变量的定义、结构变量的定义Wenzhou University Wenzhou University 13The C Programming LanguageThe C Programming Langua
11、ge(1)在声明结构类型的同时定义变量)在声明结构类型的同时定义变量struct声明定义了一种数据类型声明定义了一种数据类型。在标志结构。在标志结构成员表结束的右花括号之后可以跟一个变量表,成员表结束的右花括号之后可以跟一个变量表,这与其它基本类型的变量声明是相同的。例如:这与其它基本类型的变量声明是相同的。例如:struct pointx,y,z;从语法角度来说,这种方式的声明与声明从语法角度来说,这种方式的声明与声明int x,y,z;具有类似的意义。这两个声明都将具有类似的意义。这两个声明都将x、y与与z声声明为指定类型的变量,明为指定类型的变量,并且为它们分配存储并且为它们分配存储空间
12、空间。Wenzhou University Wenzhou University 14The C Programming LanguageThe C Programming Language(2)先声明结构类型再定义变量)先声明结构类型再定义变量如果结构声明的后面不带变量表,则不需如果结构声明的后面不带变量表,则不需要为它分配存储空间,它仅仅描述了一个要为它分配存储空间,它仅仅描述了一个结构的结构的模板或轮廓模板或轮廓。但是,但是,如果如果结构声明中带有标记,那么在结构声明中带有标记,那么在以后定义结构实例时便可以使用该标记定以后定义结构实例时便可以使用该标记定义。例如,对于上面给出的结构声明
13、义。例如,对于上面给出的结构声明point,语句,语句stuct point p;定义了一个定义了一个struct point类型的变量类型的变量p。Wenzhou University Wenzhou University 15The C Programming LanguageThe C Programming Language2、结构变量的引用、结构变量的引用在表达式中,可以通过下列形式引用某个在表达式中,可以通过下列形式引用某个特定结构中的成员:特定结构中的成员:结构名结构名.成员成员其中的结构成员运算符其中的结构成员运算符“.”将结构名将结构名与成员名连接起来。与成员名连接起来。We
14、nzhou University Wenzhou University 16The C Programming LanguageThe C Programming Language3、结构变量的初始化、结构变量的初始化和数组一样,可以用一个常量成员值列表初始和数组一样,可以用一个常量成员值列表初始化结构,即在声明结构变量时,在变量名后用化结构,即在声明结构变量时,在变量名后用等号连接括在花括号中的常量成员值列表初始等号连接括在花括号中的常量成员值列表初始化该结构变量,初始化值用逗号分隔开。例如:化该结构变量,初始化值用逗号分隔开。例如:struct point p1=20,100;还可以通过调
15、用返回相应类型结构的函数进行还可以通过调用返回相应类型结构的函数进行初始化。初始化。Wenzhou University Wenzhou University 17The C Programming LanguageThe C Programming Language/*makepoint函数:通过函数:通过x、y坐标构造一个点坐标构造一个点*/struct point makepoint(int x,int y)struct point temp;temp.x=x;temp.y=y;return temp;struct point p2=makepoint(10,50);例如:例如:Wenz
16、hou University Wenzhou University 18The C Programming LanguageThe C Programming Language提示:提示:参数名和结构成员同名不会引起冲突。其参数名和结构成员同名不会引起冲突。其实,使用重名还可以强调两者之间的关系。实,使用重名还可以强调两者之间的关系。Wenzhou University Wenzhou University 19The C Programming LanguageThe C Programming Language4、对结构变量赋值、对结构变量赋值虽然虽然C语言规定,结构变量之间一般不能语言规
17、定,结构变量之间一般不能直接赋值,但如果两个结构变量具有相同直接赋值,但如果两个结构变量具有相同的类型,那么允许将一个结构变量的值直的类型,那么允许将一个结构变量的值直接赋给另一个结构变量。接赋给另一个结构变量。Wenzhou University Wenzhou University 20The C Programming LanguageThe C Programming Language例如:例如:struct point p1=100,200,p2;p2=p1;/*等同于执行了下列语句:等同于执行了下列语句:p2.x=p1.x;p2.y=p1.y;*/Wenzhou Universit
18、y Wenzhou University 21The C Programming LanguageThe C Programming Language提示:提示:(1)只有在同一个结构类型中的不同结构变)只有在同一个结构类型中的不同结构变量之间才可以直接赋值。量之间才可以直接赋值。(2)如果两个结构类型不同,即使它们具有)如果两个结构类型不同,即使它们具有相同类型的成员,也不能相互赋值。相同类型的成员,也不能相互赋值。(3)除了两个相同类型结构变量之间能进行)除了两个相同类型结构变量之间能进行赋值外,一般情况下,对结构成员的操作主要赋值外,一般情况下,对结构成员的操作主要通过成员来进行,而成员
19、能实施的操作由成员通过成员来进行,而成员能实施的操作由成员本身的类型决定。本身的类型决定。(4)结构之间不可以进行比较。)结构之间不可以进行比较。Wenzhou University Wenzhou University 22The C Programming LanguageThe C Programming Language5、结构的嵌套、结构的嵌套结构可以嵌套。例如,用对角线上的两个点来定义矩结构可以嵌套。例如,用对角线上的两个点来定义矩形形struct rectstruct point p1;struct point p2;结构结构rect包含两个包含两个point类型的成员。则:类型
20、的成员。则:struct rect screen;/*声明声明screen变量变量*/screen.p1.x/*引用引用screen的成员的成员p1的的x坐标坐标*/Wenzhou University Wenzhou University 23The C Programming LanguageThe C Programming Language三、结构数组三、结构数组在结构数组中,数组元素的类型是同一个在结构数组中,数组元素的类型是同一个结构类型。结构类型。结构数组的定义方法与基本数据类型的数结构数组的定义方法与基本数据类型的数组定义方法类似。组定义方法类似。Wenzhou Univers
21、ity Wenzhou University 24The C Programming LanguageThe C Programming Language1、结构数组的定义、结构数组的定义Wenzhou University Wenzhou University 25The C Programming LanguageThe C Programming Language(1)在声明结构类型的同时定义数组)在声明结构类型的同时定义数组struct studentchar num20;char name20;char sex;double score;stu3;Wenzhou University
22、 Wenzhou University 26The C Programming LanguageThe C Programming Language(2)先声明结构类型再定义数组)先声明结构类型再定义数组struct studentchar num20;char name20;char sex;double score;struct student stu3;Wenzhou University Wenzhou University 27The C Programming LanguageThe C Programming Language2、结构数组的初始化、结构数组的初始化对结构数组,可以
23、按照结构成员初始化或对结构数组,可以按照结构成员初始化或者赋值的方法进行,只是赋值不是对单一者赋值的方法进行,只是赋值不是对单一的成员而是对数组进行。的成员而是对数组进行。Wenzhou University Wenzhou University 28The C Programming LanguageThe C Programming Language例如:例如:struct studentchar num20;char name20;char sex;double score;stu3=99101,Li,M,87.5,99102,Zhou Fun,M,99;Wenzhou Universi
24、ty Wenzhou University 29The C Programming LanguageThe C Programming Language例例9.3 有一个结构有一个结构student,含,含有学生的学号、姓名、有学生的学号、姓名、性别和性别和1门课的成绩这门课的成绩这4个成员。已知有个成员。已知有5个学生,个学生,求求5个学生该门课的平均成绩,并统计该门课不及个学生该门课的平均成绩,并统计该门课不及格的人数。格的人数。输入样例:输入样例:1101 Li ping M 451102 Zhang ping M 62.51103 He fang F 92.51104 Cheng li
25、ng F 871105 Wang ming M 58输出样例:输出样例:sum=382.5average=76.5count=2Wenzhou University Wenzhou University 30The C Programming LanguageThe C Programming Language#include struct studentchar num20;char name20;char sex;double score;boy5=1101,Li ping,M,45,1102,Zhang ping,M,100,1103,He he,F,92.5,1104,Cheng li
26、n,F,87,1105,Wan ming,M,58;Wenzhou University Wenzhou University 31The C Programming LanguageThe C Programming Languageint main()int i,c=0;double ave,s=0;for(i=0;i5;i+)s+=boyi.score;/*求总分求总分*/if(boyi.score结构成员结构成员这种形式引用相应的结构成员。这种形式引用相应的结构成员。运算符运算符.和和-都是左结合的,所以,对于下面的都是左结合的,所以,对于下面的声明:声明:struct rect r,
27、*rp=&r;以下以下4个表达式是等价的:个表达式是等价的:r.pt1.x(r.pt1).xrp-pt1.x(rp-pt1).xWenzhou University Wenzhou University 35The C Programming LanguageThe C Programming Language结构指针结构指针又如,有如下的结构声明:又如,有如下的结构声明:structint len;char*str;*p;则则+p-len 将增加将增加len的值,而不是增加的值,而不是增加p的值。的值。(+p)-len 将先执行将先执行p的加的加1操作,再对操作,再对len执行操作执行操作(
28、p+)-len 先对先对len执行操作,然后再将执行操作,然后再将p加加1(该表达式中(该表达式中的括号可以省略)的括号可以省略)*p-str 读取的是指针读取的是指针str所指向的对象的值;所指向的对象的值;*p-str+先读取指针先读取指针str指向的对象的值,然后再将指向的对象的值,然后再将str加加1(*p-str)+将指针将指针str指向的对象的值加指向的对象的值加1;*p+-str 先读取指针先读取指针str指向的对象的值,然后再将指向的对象的值,然后再将p加加1。Wenzhou University Wenzhou University 36The C Programming L
29、anguageThe C Programming Language#includeint main()struct pointint x,y;a4=1,2,3,3,5,10,12,8;struct point*p=a;printf(%d,p+-x);printf(%d,+p-y);printf(%dn,(a+3)-x);return 0;例例9.4 写出下列程序的运行结果写出下列程序的运行结果。Wenzhou University Wenzhou University 37The C Programming LanguageThe C Programming Language运行过程分析:运行
30、过程分析:(1)p+-x:先读取指针:先读取指针p指向的对象指向的对象的值,然后再执行的值,然后再执行p的加的加1操作。操作。(2)+p-y:先读取指针先读取指针p指向的对象,指向的对象,然后再对然后再对p指向的对象执行加指向的对象执行加1操作。操作。(3)(a+3)-x:读取相对指针:读取相对指针a向下向下3个个单位的对象的值。单位的对象的值。Wenzhou University Wenzhou University 38The C Programming LanguageThe C Programming Language注意:注意:结构的长度不一定等于各成员长度之和结构的长度不一定等于各
31、成员长度之和。因为不同的。因为不同的对象有不同的对齐要求,所以,结构中可能会出现未对象有不同的对齐要求,所以,结构中可能会出现未命名的命名的“空穴空穴”(hole)。例如,假设。例如,假设char类型占用类型占用1个字节,个字节,int类型占用类型占用4个字节,则下列结构:个字节,则下列结构:structchar c;int i;可能需要可能需要8个字节的存储空间,而不是个字节的存储空间,而不是5个字节。个字节。使用使用sizeof运算符可以返回正确的对象长度,即运算符可以返回正确的对象长度,即sizeof(what)。Wenzhou University Wenzhou University
32、 39The C Programming LanguageThe C Programming Language五、结构与函数五、结构与函数结构的合法操作只有几种:作为一个整体赋值结构的合法操作只有几种:作为一个整体赋值或复制、通过或复制、通过“&”运算符取地址、访问其成运算符取地址、访问其成员。其中,复制或赋值包括向函数传递参数以员。其中,复制或赋值包括向函数传递参数以及从函数返回值。及从函数返回值。至少可以通过至少可以通过3种可能的方法传递结构:种可能的方法传递结构:一是分别传递各个结构成员;一是分别传递各个结构成员;二是传递整个结构;二是传递整个结构;三是传递指向结构的指针。这三是传递指向
33、结构的指针。这3种方法各有利弊。种方法各有利弊。但如果传递给函数的结构很大,使用指针方式的效但如果传递给函数的结构很大,使用指针方式的效率通常比复制整个结构的效率要高。率通常比复制整个结构的效率要高。Wenzhou University Wenzhou University 40The C Programming LanguageThe C Programming Language例例9.5 定义一个结构变量(包括年、月、日成员)。计算该日在本定义一个结构变量(包括年、月、日成员)。计算该日在本年中是第几天。注意闰年问题。年中是第几天。注意闰年问题。输入样例:输入样例:2006/3/12输入样
34、例:输入样例:71Wenzhou University Wenzhou University 41The C Programming LanguageThe C Programming Language#include typedef structint year;int month;int day;DATE;int calDay(DATE x);/*函数声明函数声明*/int a13=0,31,28,31,30,31,30,31,31,30,31,30,31;/*声明全局数组声明全局数组*/int main()DATE x;int totalDay;scanf(%d/%d/%d,&x.yea
35、r,&x.month,&x.day);totalDay=calDay(x);printf(%dn,totalDay);return 0;Wenzhou University Wenzhou University 42The C Programming LanguageThe C Programming Languageint calDay(DATE x)int i;int s=0;for(i=1;i2)s+;return s;Wenzhou University Wenzhou University 43The C Programming LanguageThe C Programming L
36、anguage六、单向链表六、单向链表在用数组存放数据时,需要事先定义固定在用数组存放数据时,需要事先定义固定好的数组,在数组元素个数不确定时,可好的数组,在数组元素个数不确定时,可能会发生浪费内存空间的情况。能会发生浪费内存空间的情况。而链表可以动态地进行存储分配,它是一而链表可以动态地进行存储分配,它是一种常见的重要数据结构。种常见的重要数据结构。Wenzhou University Wenzhou University 44The C Programming LanguageThe C Programming Language单向链表单向链表由于链表的各个部分可以不连续存放,长度可由于链
37、表的各个部分可以不连续存放,长度可以不加限定,并根据需要动态地开辟内存空间,以不加限定,并根据需要动态地开辟内存空间,可以比较自由方便地插入新元素(节点),因可以比较自由方便地插入新元素(节点),因此使用链表可以节省内存,并提高操作效率。此使用链表可以节省内存,并提高操作效率。链表分为单向链表和双向链表。在此,只介绍链表分为单向链表和双向链表。在此,只介绍单向链表,如图单向链表,如图9-1所示。所示。Wenzhou University Wenzhou University 45The C Programming LanguageThe C Programming Language单向链表单向
38、链表链表有一个链表有一个“头指针头指针”变量,图中以变量,图中以head表示,表示,它指向链表的第一个元素。链表中每一元素称它指向链表的第一个元素。链表中每一元素称为为“结点结点”,每个结点都应包括两个部分:用,每个结点都应包括两个部分:用户需要用的实际数据和下一个结点的地址。户需要用的实际数据和下一个结点的地址。链表中的最后一个结点称为表尾,其下一个结链表中的最后一个结点称为表尾,其下一个结点的地址值为点的地址值为NULL(表示为空地址)。(表示为空地址)。链表的各个结点在内存中可能是不连续存放的,链表的各个结点在内存中可能是不连续存放的,具体存放位置由系统分配。具体存放位置由系统分配。对单
39、向链表的操作有:建立、遍历、插入与删对单向链表的操作有:建立、遍历、插入与删除等常用操作。除等常用操作。Wenzhou University Wenzhou University 46The C Programming LanguageThe C Programming Language提示:提示:链表根据需要开辟内存单元。链表根据需要开辟内存单元。如果不提供如果不提供“头指针头指针”(head),则整个链,则整个链表都无法访问。表都无法访问。Wenzhou University Wenzhou University 47The C Programming LanguageThe C Prog
40、ramming Language1 1、建立动态链表、建立动态链表所谓建立动态链表是指一个一个地开辟节所谓建立动态链表是指一个一个地开辟节点和输入各节点数据,并建立起前后相链点和输入各节点数据,并建立起前后相链的关系。有两种方式:从表头创建链表和的关系。有两种方式:从表头创建链表和从表尾创建链表。我们只介绍后一种方式。从表尾创建链表。我们只介绍后一种方式。Wenzhou University Wenzhou University 48The C Programming LanguageThe C Programming Language首先声明一个结构:首先声明一个结构:struct stud
41、entint num;float score;struct student*next;Wenzhou University Wenzhou University 49The C Programming LanguageThe C Programming Language然后,从表尾创建链表,步骤如下:然后,从表尾创建链表,步骤如下:(1)设单向链表的表头指针为)设单向链表的表头指针为head(它总是(它总是指向第一个节点),尾指针为指向第一个节点),尾指针为tail(它总是指(它总是指向最后一个节点),它们的初始值为向最后一个节点),它们的初始值为NULL。(2)一旦链表中有新的节点加入,把它
42、添加)一旦链表中有新的节点加入,把它添加到表尾,即把原来链表的尾节点的到表尾,即把原来链表的尾节点的next域指向域指向该新增的节点(应该注意的是,建立链表的第该新增的节点(应该注意的是,建立链表的第一个节点时,整个链表是空的)。一个节点时,整个链表是空的)。(3)由于每增加一个节点,要申请一个动态)由于每增加一个节点,要申请一个动态存储空间,以便存放相应的数据,故引入一个存储空间,以便存放相应的数据,故引入一个临时指针变量临时指针变量p。Wenzhou University Wenzhou University 50The C Programming LanguageThe C Progra
43、mming Language第第1步:建立第步:建立第1个结点个结点p=(struct student*)malloc(LEN);p-num=num;p-score=score;p-next=NULL;head=p;(因为此时(因为此时head=NULL)tail=p;Wenzhou University Wenzhou University 51The C Programming LanguageThe C Programming Language第第2步:建立第步:建立第2个结点个结点p=(struct student*)malloc(LEN);p-num=num;p-score=scor
44、e;p-next=NULL;tail-next=p;(因为此时(因为此时head!=NULL)tail=p;Wenzhou University Wenzhou University 52The C Programming LanguageThe C Programming Language第第3步:建立第步:建立第3个结点个结点p=(struct student*)malloc(LEN);p-num=num;p-score=score;p-next=NULL;tail-next=p;tail=p;Wenzhou University Wenzhou University 53The C Pr
45、ogramming LanguageThe C Programming Language#include#include#define LEN sizeof(struct student)struct studentint num;float score;struct student*next;建立链表的函数建立链表的函数Wenzhou University Wenzhou University 54The C Programming LanguageThe C Programming Languagestruct student*creatLink(void)int num;float sc
46、ore;struct student*head,*p,*tail;head=tail=NULL;while(scanf(%d,&num)&num!=0)scanf(%f,&score);p=(struct student*)malloc(LEN);p-num=num;p-score=score;p-next=NULL;if(head=NULL)head=p;elsetail-next=p;tail=p;return head;Wenzhou University Wenzhou University 55The C Programming LanguageThe C Programming L
47、anguage2 2、输出动态链表、输出动态链表输出动态链表,即将链表中各节点的数据输出动态链表,即将链表中各节点的数据依次输出。首先要知道链表第一个节点的依次输出。首先要知道链表第一个节点的地址,也就是要知道地址,也就是要知道head的值。然后设一的值。然后设一个指针变量个指针变量p,先指向第一个节点,输出,先指向第一个节点,输出p所指的节点,然后使所指的节点,然后使p后移一个节点,后移一个节点,再输出,直到链表的尾节点。再输出,直到链表的尾节点。Wenzhou University Wenzhou University 56The C Programming LanguageThe C P
48、rogramming Languagevoid printLink(struct student*head)struct student*p;if(head=NULL)printf(No Records.n);elseprintf(These records are:n);for(p=head;p!=NULL;p=p-next)printf(%d%.1fn,p-num,p-score);输出动态链表的函数输出动态链表的函数Wenzhou University Wenzhou University 57The C Programming LanguageThe C Programming Lan
49、guage3 3、对链表的删除操作、对链表的删除操作从一个动态链表中删去一个结点,即把它从一个动态链表中删去一个结点,即把它从链表中分离开来,撤销原来的链接关系。从链表中分离开来,撤销原来的链接关系。Wenzhou University Wenzhou University 58The C Programming LanguageThe C Programming Language现在考虑删除链表中所有符合要求的结点:现在考虑删除链表中所有符合要求的结点:(1)需要考虑被删除节点是否为表头。)需要考虑被删除节点是否为表头。若被删除的节点为表头,则表头要后移。若被删除的节点为表头,则表头要后移。
50、(2)引入两个辅助指针)引入两个辅助指针p1、p2,p2始终始终指向当前准备删除的节点,而指向当前准备删除的节点,而p1则总是指则总是指向向p2的前一个节点。的前一个节点。(3)链表节点删除的原则是:先链接,)链表节点删除的原则是:先链接,后断开。后断开。Wenzhou University Wenzhou University 59The C Programming LanguageThe C Programming Language第第1种情况:要删的是第一个结点种情况:要删的是第一个结点p2=head;head=head-next;free(p2);Wenzhou University