- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算概论 第十二讲 链表 北京大学信息学院 本讲内容 指针回顾 结构回顾 链表的基本概念 链表的操作 链表的应用 1. 指针回顾 内存是按地址编码的,访问内存的时候是按照其地址进行的。指针就是一个内存地址。我们可以根据指针来访问它所指向的内存。定义指针的时候可以指定它所指向的内存区域所对应的变量的类型。例如: int *pi; // 定义一个名为pi的指向整数类型变量的指针。 float *pf; // 定义一个名为pf的指向浮点类型变量的指针。 我们称pi, pf为指针变量,pi是一个整数指针,pf是浮点数指针。 定义各种类型的指针变量 定义一个指针变量: 类型 * 指针变量名 = 指针初值; 其中的“类型” 是指针指向的变量的类型 字符类型的指针变量 char *message; 指向结构类型的指针变量 struct list *next, *previous; 指针数组,数组元素是指向整数类型变量的指针 int *pointers[10]; NULL是一个特殊的指针(地址值),当一个指针的值为NULL时,我们称指针为一个空指针,它不指向任何变量(内存地址)。 指针相关的操作符 求地址运算符 *指针运算符 若执行了p=m,则 *p 与 m 等价,都代表变量m的存储单元 指向结构的指针 当指针指向一个结构时,可用指针-分量或(*指针).分量形式访问结构的分量,例如 3. 链表的基本概念 数组:在定义时元素个数是确定的 动态数组:可以在程序运行时动态确定元素的个数(即根据需要申请相应的内存空间),但一旦确定元素个数后,是不能再变化的。 但元素个数是动态变化的呢? 开始时是2个元素 一会儿后变成4个元素 再一会儿后变成3个元素 …… 循环链表的应用:约瑟夫问题 有N个猴子围成一圈,每个猴子有一个编号,编号从1到N。打算从中选出一个大王。经过协商,决定选大王的规则如下:第一个猴子开始从1开始报数,报到M的猴子出列,然后下一个猴子再从1开始报数,最后剩下来的就是大王。 尝试不同的解决方法: 利用公式求解 利用数组求解 利用循环列表求解 小结 结构 指针 链表 基本概念 操作 应用 链表的各种形式 * * void main() { int m = 0; int n = 0; int *p; // 求m的地址赋值给变量p p = m; // 给p所指向的变量赋值1 *p = 1; p = n; *p = 2; // 读取p所指向的变量的值 m = *p; } struct point { float x, y; } point1, point2; struct point * pc = point1; // pc-x 等价与 point1.x 等价于 (*pc).x pc-x = 10; pc-y = 20; pc = point2; (*pc).x = 100; (*pc).y = 200; 指针变量作为结构的分量 结构中的分量也可以是指针变量,可指向一块内存空间,例如: struct node { float x, y; int * px; } node1, node2; 此时,node1.px、node2.px分别是2个整型指针变量 2. 结构 把多个紧密关联的变量顺序组织在一起,定义成一个新的复合类型——结构类型 定义一个结构类型 struct 结构类型名 { 类型1 分量名1; 类型2 分量名2; ...... }; 结构分量的类型可以相同,也可不同 同一个结构内的分量名不可相同 2. 结构 struct student { int num; char name[12]; double score; struct student next; }; struct student { int num; char name[12]; double score; struct student *next; }; 结构分量的类型不能是正在定义的结构类型,但可以是该结构类型的指针 Why? 3. 链表的基本概念 链表是一种常用的重要的数据结构,链表可以存放任意多个元素,并且其个数可以动态变化。 链表通常有一个“头指针”变量,上图中以header表示,它存放一个地址。该地址指向一个元素。链表中每个元素称为“结点”,每个结点都包括2个部分:一为所需存储的实际数据;二为下一个结点的地址。可以看出:header指向第一个元素,第一个元素指向第二个,…,直到最后一个元素,它不再指向其它元素,称为链表的“表尾”,其地址部分为“NULL”,链表到此结束。 a1
文档评论(0)