一般使用结构体数组.PPT

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 关于单链表掌握以下知识: 为什么需要单链表 如何通过指针和结构体的定义实现单链表结构 单链表常用操作的实现方法:建立、遍历、插入、删除、查找、 链表及其应用 处理一个班的学生,一般使用结构体数组, 需预留足够大的数组空间 带来两个问题: 1. 多余的元素占用的空间浪费,可动态申请数组空间解决, 2. 但有时系统不能满足过大的连续存储空间的要求。 解决:使用链表结构,一次只需要一个结构体的连续空间, 就像现实生活中的链子,由若干环节组成, 在 C++ 语言中用结构体实现链表环节, 对于一个班,有多少个学生,就动态地生成多少个结构体, 如何来连接它们呢?用指针 将它们连接成一个链表结构, 画图表示,单向链表 --- 9.10.2 链表概念的引入 student stu[10]= { {10101, Li Nin,18,M,88}, {...}, {...}, ...... }; student *p; p = stu; for(i=0; i10; i++, p++) cout p-num p-name p-score endl ; 2. 指向结构体数组元素的指针 10101 “Li Lin” 18 ‘M’ 10102 “Zhang Fun” 19 ‘M’ 10104 “Wang Min” 20 ‘F’ stu[1] 100 99 88 stu[0] stu[2] p, stu p+1 p+2 …... (环节) (节点) 结构体 …... …... …... …... …... head 0 为形成链表,结构体要增加一个成员, 即指针,指向下一个结构体节点。 如上图是一个单向链表。 结尾标志 NULL 空指针 优点:解决了上述两个问题 1. 需要多少结构体,就动态申请多少个结构体空间, 比数组实现节约空间。 2. 每个结点未必连续存放,通过指针将各个结点连接起来, 这样对大片连续存储区的要求降低。 3. 另外,对链表的操作如插入、删除等, 也变得比较简单了。(不需要挪动数组元素空间了) struct student //定义节点结构体类型 { int num; /* 学号 */ char name[20]; /* 姓名 */ int age; /* 年龄 */ char sex; /* 性别 */ int score; /* 成绩 */ student *next; }; ① 创建链表(有序链表、无序链表) ② 遍历链表(依次访问链表的每一个结点) 查找结点,释放链表各节点的空间 ③ 删除结点 ④ 插入结点 9.10.3 链表的常用算法 链表上的数据结点为: struct node { int data; node *next; }; [例] 动态申请,建立链表,输出各结点数据,最后循环依次释放各结点空间。 #include iostream.h struct node{ int data; node *next; }; void main( ) { node *head, *p1, *p2; head = new node; p1 = new node; p2 = new node; head-data = 1000; head-next = p1; p1-data = 1001; p1-next = p2; p2-data = 1002; p2-next = NULL; while(head!=NULL) { cout head-data endl; p1=head; head = head-next; delete p1; } } head p1 p2 NULL 输出:1000 1001 1002 1.创建无序链表:循环输入数据,若数值不为

您可能关注的文档

文档评论(0)

fengruiling + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档