《《结构体与链表》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《结构体与链表》PPT课件.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、结构体与链表结构体和指针指向结构体变量的指针定义形式:struct 结构体名 *结构体指针名;例 struct student *p;存放结构体变量在内存的起始地址numnamesexagestupstruct student int num;char name20;char sex;int age;stu;struct student *p=&stu;使用结构体指针变量引用成员形式例 int n;int *p=&n;*p=10;n=10struct student stu1;struct student *p=&stu1;stu1.num=101;(*p).num=101(*结构体指针名).
2、成员名结构体指针名结构体指针名-成员名成员名结构体变量名.成员名表示指向的运算符优先级:1结合方向:从左向右三种基本形式:结构体变量.成员名 (*p).成员名 p-成员名main()struct student long int num;char name20;char sex;float score;stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,Li Lin);p-sex=M;p-score=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p
3、-score);例例 子子结构体变量作为函数参数用结构体变量的成员作实在参数-值传递用指向结构体变量或数组的指针作参数-地址传递用结构体变量作参数-多值传递,效率低用结构体变量作函数参数void func(struct data);struct data int a,b,c;main()struct data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(arg);printf(arg.a=%d arg
4、.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void func(struct data parm)printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c);printf(Process.n);parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c);printf(Return.n);arga:27b:3c:30(main)arga:27b:3c:30(main)(fu
5、nc)parma:18b:5c:90arga:27b:3c:30(main)arga:27b:3c:30(main)(func)parma:27b:3c:30用结构体指针变量作函数参数struct data int a,b,c;main()void func(struct data *parm);struct data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(&arg);printf(arg.a=
6、%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void func(struct data *parm)printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c);printf(Process.n);parm-a=18;parm-b=5;parm-c=parm-a*parm-b;printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c);printf(Return.n);arga:18b:5c:90(main)(func)parm*arga:
7、27b:3c:30(main)(func)parm*arga:27b:3c:30(main)arga:18b:5c:90(main)链表指针与结构的综合链表是程序设计中一种重要的动态数据结构,动态性体现为:链表中的元素个数可以根据需要增加和减少,不像数组,在声明之后就固定不变;元素的位置可以变化,即可以从某个位置删除,然后再插入到一个新的地方;链表中的元素称为“节点”,每个节点包括两个大的部分:数据部分和指向其它节点的指针;单向链表通常有一个头指针,用于指向链表头;单向链表有一个尾节点,该节点的指针部分指向一个空节点,空节点表示为 NULLlinkdataheadlinkdatalinkdat
8、aNULL链表是由节点构成的,因此,关键就是定义节点。链表的节点定义打破了先定义再使用的限制,即,可以用自己定义自己(回想递归函数的定义也违反了先定义再使用的限制)。例子#define NULL 0struct studentlong numfloat score;struct student*link;用 struct student 本身说明成员*link链表的特点:动态性节点可以根据需要增加或减少(插入/删除)节点的位置可以调整linkData-1headlinkData-2linkData-3NULL原来的链(不含数据节点t)linkData-1headlinkData-2linkDa
9、ta-3NULLlinkData-tprq在原数据节点2和3之间要新增数据节点t:假定数据节点2和3 分别由指针 p 和 r 指示,待插数据节点t 由 q 指示;则,新增操作为:q-link=r;p-link=q;headlinkData-1linkData-3NULLlinkData-2prq调整节点位置原来的链调整原来链中的数据节点2和数据节点3的位置(实际上不一定相邻):q-link=r-link;p-link=r;r-link=q;headlinkData-1linkData-3NULLlinkData-2prqlinkData-1headlinkData-2linkData-3NUL
10、L原来的链减少节点(删除)headlinkData-1linkData-3NULLlinkData-2prq删除原来链中的数据节点2的操作:p-link=r;释放q 所指的节点:free(q);/见下面解释节点插入和删除两个标准库函数(在malloc.h 中)void*malloc(unsigned int size)从堆中分配大小为 size 的存储空间,在插入节点时必须的操作(具体见教材)。void free(void*p)释放 p 指向的节点到堆中,在删除节点时需要的操作。用typedef定义类型功能:用自定义名字为已有数据类型命名类型定义简单形式:typedef type name;例
11、 typedef int INTEGER;类型定义语句关键字已有数据类型名用户定义的类型名例 typedef int INTEGER;typedef float REAL;例 INTEGER a,b,c;REAL f1,f2;int a,b,c;float f1,f2;说明:1.typedef 没有创造新数据类型2.typedef 是定义类型,不能定义变量3.typedef 与 define 不同 define typedef预编译时处理 编译时处理简单字符置换 为已有类型命名 typedef定义类型步骤按定义变量方法先写出定义体 如 int i;将变量名换成新类型名 如 int INTEGE
12、R;最前面加typedef 如 typedef int INTEGER;用新类型名定义变量 如 INTEGER i,j;例 定义数组类型 int a100;int ARRAY100;typedef int ARRAY100;ARRAY a,b,c;例 定义结构体类型 struct date int month;int day;int year;DATE;例 定义结构体类型typedef struct date int month;int day;int year;DATE;例 定义结构体类型 struct date int month;int day;int year;d;例 定义结构体类型
13、DATE birthday,*p;类型定义可嵌套例 typedef struct club char name20;int size;int year;GROUP;typedef GROUP *PG;PG pclub;GROUP为结构体类型PG为指向GROUP的指针类型 GROUP *pclub;struct club *pclub;期末考试要点卷面总分:100计算机基础(25分左右)C 语言程序设计(75分左右)最终成绩计算:上机(20%)+作业(10%)+期中(10%)+期末(60%)考试要点(续)内容:全部讲授的内容题型:填空(共30分,15小题)名词解释(共6分,2小题)简答(共12分
14、,3小题)程序变换(6分,1小题)程序填空(8分,1小题,4空)程序分析(16分,3小题)程序设计(22分,2小题)C 语言小结基本概念C 语言的基本特点高级语言的特点结构化、自然简洁、可移植性设计效率好低级语言的优点地址操作程序执行效率高灵活性、自由度大对程序员的要求高C语言程序的基本结构模块化非可执行/可执行算法,基本特征是什么?流程图的基本构成,如何画流程图?运算符/表达式标示符的定义变量的含义(一般变量/指针)C语言的基本数据类型:整型(三种:unsigned/short,int,long)浮点型(三种:float,double,long double)字符型(char)表达式初值/增
15、-减1/条件表达式/逗号(左右)赋值规则(从右至左)程序的控制结构(三种)顺序结构赋值语句(与赋值表达式的区别)空语句输入-输出语句(非 C 语言的语句,而是标准函数,引用时注意包含)分支结构关系表达式逻辑表达式条件运算表达式(与条件语句区别)If 分支(配对原则)Switch 语句(可枚举离散值)循环结构Goto 的特点及程序设计对goto的建议三种控制:For:计数循环While:条件先满足循环Do-while:条件后满足循环三种结构是等价的,为什么?break-continue 的区别?数组数组:多个相同类型的元素集合的描述数组类型:一维二维/多维数组的基本类型数组引用(下标索引/地址+
16、内容表示法)基本类型为字符型时字符串初始化方法(字符串的初始化)函数定义与引用形参/实参/类型/返回值函数原型的意义参数传递的方向性(单向性传值)定义的无嵌套/引用的可嵌套递归变量的作用域(全局/局部相对)变量的存储类型及作用(register的作用?)划分函数的目的和时机预处理预处理的特点宏定义(#define):与函数的区别不带参数带参数包含的意义指针指针的本质意义是什么?(对象的地址)多数情况下指向特定类型数据的地址也可以指向(程序代码)函数的地址指针与数组的异同比较指向数组的指针与指针数组/指向函数的指针与返回指针的函数的异同。指针也可以指向结构结构与动态链表为什么要引入结构?结构的定
17、义和引用结构变量的初始化链表动态数据结构(元素个数事先不需确知)刻画链表(结构的自嵌套定义)插入链表节点删除链表节点调整节点次序类型名的重定义(typedef)计算机基础部分概论计算机的发展,特点,分类冯.诺伊曼结构编码与进制转换二进制的原码、补码、反码,定点、浮点二进制的加减运算计算机系统构成软硬件系统构成特点计算机硬件系统和体系结构CPU的构成,主机构成,计算机工作原理(如何执行程序)硬盘工作原理总线的特点软件构成与特点软件与程序的区分系统软件与应用软件的划分OS的基本特点与分类MS Windows 的特点和操作编译系统和解释系统的特点和异同比较高语言与低级语言汉字、多媒体各种码:内码、国标码,区位码,外码,字形码(两种),各种码间的转换关系汉字的输入过程多媒体的特点图像的表示(编码)与数字视频数据的压缩数据库与信息安全数据库的特点,与文件系统的比较三种基本模型的特点数据库系统的构成数据出错的原因计算机病毒及其特点网络网络的硬件构成和主要功能;不同分类方式;局域网的主要构成与连接方式数据通信中的若干概念Window 对网络的设置Internet 及中国的四大主干网Internet 的主要应用IP 地址及其解释,URL网络 OS 与一般 OS 的异同HTML 的含义及其特点几大工具的使用与特点WordExcelPowerpointFrontpage