c-chap12 链表(1).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
提纲 12.2 自引用结构 12.4 链表 12.4.1 链表结构 12.4.2 链表的创建、结点的插入和删除 12.4.3 链表基本操作 自引用结构 自引用结构包含一个指针成员,该指针指向与自身同一个类型的结构。如: struct node{ int data; struct node * nextPtr; }; struct node 就是自引用结构。nextPtr称为链节(link),用于把一个struct node类型的结构变量和另一个同类型的结构变量链在一起。 提纲 12.2 自引用结构 12.4 链表 12.4.1 链表结构 12.4.2 链表中结点的访问 12.4.3 链表基本操作 12.4.1 链表结构 问题的引出 12.4.1 链表结构 解决方案: 把第一本书所在抽屉号记录在一张纸上; 把第二本书所在抽屉号记录在一张纸,放到第一本书所在抽屉里; 把第三本书所在抽屉号记录在一张纸,放到第二本书所在抽屉里; 12.4.1 链表结构 一个类比: 如果有多个学生记录需要存放到内存,而存放记录的内存通常是不连续的,如何能访问到这些记录? 12.4.1 链表结构 struct student{ /*学生信息结构类型*/ char no[7]; /*学号*/ char name[9]; /*姓名*/ } ; main() { char no[7]; struct student * ptr; printf(请输入学生学号); gets(no);//读入学号 while(strcmp(no,0000)!=0){ ptr = malloc(sizeof(struct student)) ; strcpy(ptr-no,no);//学号复制到内存中 printf(请输入学生姓名); gets(ptr-name); //读取姓名到内存中 printf(请输入学生学号); gets(no); } ... } 12.4.1 链表结构 类比 书---学生信息 抽屉---存放学生信息的内存 记录第一本书所在抽屉号的纸张---指针 记录下一本书所在抽屉号的纸张---结构变量里的指针成员 12.4.1 链表结构 12.4.1 链表结构 12.4.1 链表结构 链表的特点: 链表是一种存储结构,用于存放线性表; 链表的结点是根据需要调用动态内存分配函数进行分配的,因此链表可随需要伸长缩短,在要存储的数据个数未知的情况下节省内存; 链表的结点在逻辑上是连续的,但是各结点的内存通常是不连续的,因此不能立即被访问到,只能从头结点开始逐结点访问。 提纲 12.2 自引用结构 12.4 链表 12.4.1 链表结构 12.4.2 链表的创建、结点的插入和删除 12.4.3 链表基本操作 1.链表的创建 从无到有,结点逐个创建、加入,构成链表 2.链表中结点的访问 如何访问链表中的结点:由于链表中结点的内存是动态分配的,无法通过名称去访问,因此只能通过结点的地址去访问。 某结点的地址记录在其前驱结点的地址域里,因此要想访问第n个结点,必须先得访问第n-1个结点,读取该结点的地址域;而要想访问第n-1个结点,必须先得访问第n-2个结点;以此类推,一直推到访问第1个结点。而第1个结点是由指针headPtr指向的,因此能访问第1个结点,从而也就能访问第2个结点,第3个结点…… 2. 链表中结点的访问 访问头结点: printf(“%d”,headPtr-data); 访问第二个结点:currentPtr=headPtr-nextPtr; printf(“%d”, currentPtr-data); 访问第三个结点: currentPtr=currentPtr-nextPtr; printf(“%d”, currentPtr-data); 3.链表结点的动态增加和删除 链表和数组存储线性表的比较 数组的优点: 数组中的元素在内存中是连续存放的,能根据数组的首地址计算出各数组元素的内存地址,所以可以直接用下标访问到数组元素;而链表中的元素在内存中通常是不连续存放的,因此不能被立即访问到。 链表的优点: 1、可伸缩性:数组一旦

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档