- 1、本文档共64页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章数据封装—构体1
链表总结 实现较复杂 插入、删除效率高,但查找第i个元素效率低 无表满的问题 适合于动态表 总结 本章介绍了结构体 作用: 处理更复杂的数据 使用: 定义类型 定义变量 链表 指针与结构体数组 与普通的指针一样,指向结构体的指针也能够用来指向一个结构体数组。此时,对指针加1就是加了该结构体的大小。 第8章 数据封装—结构体 结构体的概述 结构体类型的定义 结构体类型的变量 结构体数组 结构体作为函数的参数 链表 结构体作为参数传递 尽管结构体和数组一样也有许多分量组成,但结构体的传递和普通内置类型是一样的。它是将实际参数中的每个分量复制到形式参数的每个分量中。 结构体的传递 Void printPerson(PersonT p) 指向结构体的指针作为参数 因为结构体是值传递,当希望把函数内部对结构体的修改返回给主调函数时,可以用指针传递或引用传递 由于结构体一般占用的内存量都比较大,值传递既浪费空间又浪费时间。因此可用指针传递或引用传递 指针传递形式比较繁琐,所以C++通常用引用传递 引用传递的问题是函数中可以修改实际参数,要控制函数中不能修改实际参数,可以加const限定 指向结构体的指针作为参数 和普通的指针传递一样,函数中可以通过指针访问主调函数的记录 减少函数调用时的数据传递量 Void PrintPerson(personT p); Void PrintPerson(const personT p); 结构体传递的实例 设计一函数,打印学生信息 设计一:值传递 Void PrintStudent(studentT s) {cout s.no ‘\t’ s.name ‘\t’ s.chinese ‘\t’ s.math ‘\t’ s.english endl; } 缺点:浪费时间空间 设计二:指针传递或引用传递 Void PrintStudent(studentT *s) { cout s-no ‘\t’ s-name ‘\t’ s-chinese ‘\t’ s-math ‘\t’ s-english endl; } Void PrintStudent(studentT s) { cout s.no ‘\t’ s.name ‘\t’ s.chinese ‘\t’ s.math ‘\t’ s.english endl; } 缺点:不安全 设计三:C++的常规做法 Void PrintStudent(const studentT s) {cout s.no ‘\t’ s.name ‘\t’ s.chinese ‘\t’ s.math ‘\t’ s.english endl; } 特点:节约内存,提高函数调用速度,可靠 返回结构体类型的函数 一个函数返回一个结构体。如: personT GetPersonData(void) {personT person; ……. Return(person);} 返回的是一个结构体的复制。 在主调函数中必须有这样的程序段: Main() { personT p1,p2; p1=GetPersonData();} 返回结构体引用的函数 函数返回一个结构体的引用。如: personT GetPersonData(void) {personT *person = new personT; ……. Return(*person);} 本质上返回的是结构体的地址。 在主调函数中可以有这样的程序段: Main() { personT p1=GetPersonData(); … } 函数中返回的结构体不能是局部变量 第8章 数据封装—结构体 结构体的概述 结构体类型的定义 结构体类型的变量 结构体数组 结构体作为函数的参数 链表 单链表 链表的概念 链表的存储 链表的操作 循环链表 单链表 nil head 头结点 只指出后继关系的链表 双链表 head 循环链表 head 同时存储前趋和后继 单链表 链表的概念 链表的存储 链表的操作 循环链表 单链表的存储 struct linkRec { datatype data; linkRec *next; } 存储链表就是存储链表中的一个节点的地址,因此需要定义一个节点类型 单链表 链表的概念 链表的存储 链表的操作 循环链表 单链表操作—插入 申请空间 输入数据放入申请到
文档评论(0)