- 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、线性链表概述及其结构 线性表:当一组数据元素形成了“前后”关系时,我们称之为线性表 线性表在内存中的两种形式 顺序表:以数组的形式存放,元素在内存中是连续存放的 线性链表:数据元素在内存中不需要连续存放,而是通过指针 将各数据单元链接起来,就象一条“链子”一样将数据单元前后 元素链接起来 特点:插入或删除一个数据元素时,需要移动其它数据元素 特点:插入或删除一个数据元素时,不需要移动其它数据元素 … head tail 数据1 数据2 数据n ^ 节点 指针域 表示NULL 头节点 数据域 实际数据链表 线性链表 线性链表中的节点可以用一个结构体类型来定义,其形式为: struct 节点结构体类型名 { 数据成员定义; struct 节点结构体类型名 *指针变量名; }; 例: struct Grade_Info { int score; struct Grade_Info *next; }; typedef struct Grade_Info NODE; 例: 简单链表(静态链表) #include stdio.h #define NULL 0 struct student {long num; float score; struct student *next; }; void main ( ) { struct student a,b,c,*head,*p; a.num=10101;a.score=89.5; b.num=10103;b.score=90; c.num=10107;c.score=85; head=a; a.next=b; b.next=c; c.next=NULL; p=head; do {printf(“%ld %5.1f\n”,p-num,p-score); p=p-next; }while(p!=NULL); } 运行结果: 89.5 90.0 10107 85.0 处理链表问题所需的函数: ① malloc 函数: void *malloc(unsigned int size); 功能: 分配长度为size的内存空间,函数的返 回值是该 段内存空间的起始地址,如果失败,返回空指针。 ②calloc 函数: viod *calloc(unsigned n,unsigned size); 功能: 分配n个长度为size的内存空间,函数的返 回值是该 段内存空间的起始地址,如果失败,返回空指针。 ③ free 函数: free(*p) 功能: 释放由p指向的内存空间, 使这部分内存区能被其它 变量使用,free函数无返回值。 线性链表 线性链表 链表的创建操作 含义:从无到有地建立起一个链表,即往空链表中依次插入若干结点,并保持结点之间的前驱和后继关系。 基本思想:首先创建一个头节点,让头指针head和尾指针tail都指向该节点,并设置该节点的指针域为NULL(链尾标志);然后为实际数据创建一个节点,用指针pnew指向它,并将实际数据放在该节点的数据域,其指针域置为NULL;最后将该节点插入到tail所指向节点的后面,同时使tail指向pnew所指向的节点。 2、线性链表的基本操作 线性链表 例: 链表创建操作函数Create_LinkList。 NODE *Create_LinkList ( ) //创建链表 { NODE *head, *tail, *pnew; int score; head = (NODE *)malloc (sizeof(NODE)); //创建头节点 if (head == NULL) //创建失败,则返回 { printf (no enough memory!\n); return (NULL); } head-next = NULL; //头节点的指针域置NULL tail = head;
您可能关注的文档
最近下载
- DMX512灯光调光控制程序.doc VIP
- 四种不同类型土壤保水剂保水性能的比较-生态学杂志.PDF VIP
- 2019年中央机关公开遴选和选调公务员笔试真题〔B卷完好版解析〕_党政公选考试公共科目题库_公共科目真题_模拟试题.docx VIP
- 北京市东城区汇文中学2023-2024学年七年级上学期月考数学试题(无答案).docx VIP
- 《有效复习》班队活动教案.doc VIP
- 四年级阅读理解专项训练可打印.docx VIP
- 法医考试题目及答案.doc VIP
- 《水泥胶砂保水率测定方法》GB_T 45002-2024.pdf
- USON介绍分析.ppt VIP
- 新学期小学英语开学第一课主题班会PPT课件.pptx VIP
文档评论(0)