- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言设计实姐例教程动态组织数据
学习的意义 数组:必须事先定义固定长度,静态分配存储空间。 链表:无需事先知道数据的个数,可以动态分配存储空间,插入删除简便 主要内容 7.1 建立链表的过程 看杂志时碰到有篇文章3页不够放,4页又空着太多。怎么办? 7.1 建立链表的过程 那a.part2的后面还有没有另外一部分呢? 杂志的每篇文章的最后都有一个特殊的符号,看到这个符号就知道这已经是最后了。 厚厚的一本书中,又怎样找到文章a呢?翻翻目录就知道了,那里有文章a所在页码的信息。 链表的基本概念 ? 什么是链表 链表的存储结构 什么是链表? 链表 ——一种重要且常用的数据结构,可动态地组织数据。 链表不要求两个元素在物理上相邻,只要在元素结构中加一个指针项,用来指向下一个元素的地址便可。 链表的基本概念 什么是链表 ? 链表的存储结构 链表的存储结构 链 表 利用结构体类型来实现链表 struct student { int num; float score; struct student *next; }; 建立、输出 ——动态链表 准备工作 malloc ( int size) —— 在内存中分配长度为size的连续空间 p = (struct student*)malloc(sizeof(struct student)) 建立、输出 ——动态链表 准备工作 free (void *p) —— 释放p指向的内存区 例. 建立有1个学生数据单链表 typedef struct student { int num; float score; student *next; } student; student * head, *p; head = NULL; p=(student*)malloc(sizeof(student)); scanf(“%d,%f”,p-num,p-score); p-next = NULL; head=p; 链表创建就像穿一条珠链:一根线头能将整串珠链提起,称头指针head。 开始时没有任何珠子,只有一根空线头head; 第一颗珠子(头结点)接到head上,且其后有一根线头(指针域next)可接下一颗珠子; 每次把新加入的珠子pNew(结点)接到最后一颗珠子q后的线头上。 指针q指向每次最新接入的珠子,新珠子接到q的线头上:q-next=pNew。 当不需接入珠子时,把最后一颗珠子后的线头q-next打上结:q-next=NULL。 循环体中每插入一个结点需要做以下操作: 与数组不同,链表中每个元素的存储空间都需在使用前在程序中显式地分配,并用指针指向所分配空间的首地址,用完以后再显式地释放每个元素占用的空间. 需要动态地分配和释放内存空间。 7.2 链表结点的查找 由于单链表中结点只能通过前一个结点的指针域找到,得到结点的前驱很重要。 单链表只能从链表头head开始访问链表的各个结点,且只有前一个结点的指针域才能找到后一个结点。 查找第i个结点:每访问过一个结点就让p指向下一个结点p=p-next,在访问完最后一个结点之前,沿着指针域的指向顺序遍历,直到找到第i个结点为止。 7.3 链表结点的插入 问题:输入数据的同时,将数据插入到链表中,并且保持链表中数据有序 分析: 第一个:接到head后面 第二个: 查找合适的插入位置 插入,并保持链表的前后链 第三个 …… 第N个 …… 链表的插入 链表的插入 printf(“请输入待插入字符\n); scanf(%c,ch); s=(student*) malloc (LEN); s-data=ch; s-next=NULL; p=head; while (p chp-data) { q=p; p=p-next; } q-next=s; s-next=p; 链表的插入 考虑插入结点时的几种特殊情况 插入后为第一个结点 插入后为最后一个结点 7.4 链表结点的删除 在数组操作中,无论是插入元素还是删除元素都有大量的数据需要移动 链表中删除链表结点只要对个别结点的指针做一些调整即可。 删除结点时要保证不破坏链表原来的连接关系,并且先要找到结点的前驱。 链表的删除 例 输入104表示要求删除学号为104的结点 例. 输入104表示要求删除学号为104的结点 printf(请输入想删除的字符\n); scanf(%c,ch); p=head; while(p p-data !=ch) { q=p;
您可能关注的文档
最近下载
- 22S702室外排水设施设计与施工-钢筋混凝土化粪池.docx VIP
- 企业还款计划书范本.pdf
- Unit 3 Places we live in单元整体教学设计(共六课时)2025-2026学年度人教PEP英语四年级上册.docx VIP
- 智能世界2035报告.pdf
- 标准图集-R4动力专业标准图集-室内动力管道安装-03SR417-2装配式管道吊挂支架安装图.pdf VIP
- 15MR105城市道路与开放空间低影响开发雨水设施(OCR).pdf VIP
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
- 2025至2030血液制品产业行业市场深度研究与战略咨询分析报告.docx
- 乙炔安全技术说明书.doc VIP
- 公司还款计划书范本.docx
文档评论(0)