第8章数据封装—构体.pptVIP

  • 0
  • 0
  • 约7.92千字
  • 约 64页
  • 2017-11-27 发布于江苏
  • 举报
第8章数据封装—构体

链表总结 实现较复杂 插入、删除效率高,但查找第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)

1亿VIP精品文档

相关文档