第8章数据封装—结构体

上传人:ldj****22 文档编号:51779051 上传时间:2018-08-16 格式:PPT 页数:64 大小:698KB
返回 下载 相关 举报
第8章数据封装—结构体_第1页
第1页 / 共64页
第8章数据封装—结构体_第2页
第2页 / 共64页
第8章数据封装—结构体_第3页
第3页 / 共64页
第8章数据封装—结构体_第4页
第4页 / 共64页
第8章数据封装—结构体_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《第8章数据封装—结构体》由会员分享,可在线阅读,更多相关《第8章数据封装—结构体(64页珍藏版)》请在金锄头文库上搜索。

1、程序设计 cs.sjtu 2011.9程序设计 - 1第第8 8章章 数据封装数据封装结构体结构体 v结构体的概述v结构体类型的定义v结构体类型的变量v结构体数组v结构体作为函数的参数v链表程序设计 cs.sjtu 2011.9程序设计 - 2结构体的概念结构体的概念v打印学生成绩单 ,格式如下:学号姓名语文成绩数学成绩英语成绩.00001张三96948800003李四89707600004王五908778如何在程序中表示这组学生信息?程序设计 cs.sjtu 2011.9程序设计 - 3可选方案可选方案v用二维的数组来表示该方案不可行,因为这些信息有不同的类型v每一列用一个一维数组来表示,这

2、种方法称为并联数组。要保证每位学生信息的正确性很难程序设计 cs.sjtu 2011.9程序设计 - 4为什么要使用记录为什么要使用记录v当我们考虑怎么逻辑地组织数据时,应该将一 个人的所有信息项放在一起,即保持相关性。学号姓名语文成绩 数学成绩 英语成绩 . 00001张三96948800003李四89707600004王五908778程序设计 cs.sjtu 2011.9程序设计 - 5我我 们们 希希 望望 的的 结结 构构学 生 一00001 张三 96 94 88学 生 二00003 李四 89 70 76学 生 三00004 王五 90 87 78记录在C+中称为结构体程序设计 c

3、s.sjtu 2011.9程序设计 - 6结构体类型作用结构体类型作用v结构体类型允许程序员把一些分量聚合 成一个整体,用一个变量表示。v一个结构体的各个分量都有名字,把这 些分量称为成员(member)。v由于结构体的成员可以是各种类型的, 程序员能创建适合于问题的数据聚合。程序设计 cs.sjtu 2011.9程序设计 - 7结构体的使用结构体的使用v定义一个新的结构体类型 v定义新类型的变量 v访问结构体变量 程序设计 cs.sjtu 2011.9程序设计 - 8第第8 8章章 数据封装数据封装结构体结构体 v结构体的概述v结构体类型的定义v结构体类型的变量v结构体数组v结构体作为函数的

4、参数v链表程序设计 cs.sjtu 2011.9程序设计 - 9结构体类型的定义结构体类型的定义v定义结构体类型中包括哪些分量v格式:struct 结构体类型名字段声明;如: struct studentT char no10;char name10;int chinese;int math;int english;程序设计 cs.sjtu 2011.9程序设计 - 10注意注意v字段名可与程序中的变量名相同 v在不同的结构体中可以有相同的字段名 v结构体成员的类型可以是任意类型,当然也可以是结构体类型程序设计 cs.sjtu 2011.9程序设计 - 11struct dateT int m

5、onth; int day; int year; ;struct studentT . dateT birthday; ; 程序设计 cs.sjtu 2011.9程序设计 - 12第第8 8章章 数据封装数据封装结构体结构体 v结构体的概述v结构体类型的定义v结构体类型的变量v结构体数组v结构体作为函数的参数v链表程序设计 cs.sjtu 2011.9程序设计 - 13结构体类型的变量结构体类型的变量v结构体变量的定义v结构体类型的引用v指向结构体的指针v动态分配结构体的空间 程序设计 cs.sjtu 2011.9程序设计 - 14结构体变量的定义结构体变量的定义v结构体变量的定义和普通的变量

6、定义一样。 如定义了结构体类型studentT,就可以定义结 构体变量:studentT student1;v一旦定义了一个结构体类型的变量,系统在 分配内存时就会分配一块连续的空间,依次 存放它的每一个分量。这块空间总的名字就 是结构体变量的名字。内部还有各自的名字 englishmathchinesenamenostudent1程序设计 cs.sjtu 2011.9程序设计 - 15结构体变量的初始化studentT student1=“00001”,“张三” ,87,90,77; 程序设计 cs.sjtu 2011.9程序设计 - 16定义结构体类型的同时定义变量定义结构体类型的同时定义

7、变量struct 结构体类型名字段声明; 结构体变量;struct 字段声明; 结构体变量;区别:前者可以继续用结构体类型名定义变量程序设计 cs.sjtu 2011.9程序设计 - 17结构体类型的变量结构体类型的变量v结构体变量的定义v结构体类型的引用v指向结构体的指针v动态分配结构体的空间 程序设计 cs.sjtu 2011.9程序设计 - 18结构体变量的访问成员的表示: 结构变量名.成员名 如: student1.name 如结构中还有结构,则一级一级用”.”分开 ,如如:student1.birthday.yearv对结构体类型变量的引用一般为引用他 的成员 程序设计 cs.sjt

8、u 2011.9程序设计 - 19结构变量的赋值v结构体是一个统称。每个结构体类型在使用前都要先定义 自己有哪些分量。系统事先无法知道如何处理他。v因此,结构体变量的赋值通常是通过对它的每一个成员的 赋值而实现。如:输入student1的内容可用: cin student1.no student1.name student1.chinese student1.math student1.english student1.birthday.year student1.birthday.month student1.birthday.day;v同类型的结构变量之间可以相互赋值,如Student1

9、= student2;将student2的成员对应赋给student1的成员程序设计 cs.sjtu 2011.9程序设计 - 20结构变量的输出v结构体变量的输出通常是通过输出它的每一 个成员而实现。如:输出student1的内容可 用: cout 成员 如:sp-namestudent1.成员 -是所有运算符中优先级最高的 通常程序员习惯使用第二种方法程序设计 cs.sjtu 2011.9程序设计 - 24结构体类型的变量结构体类型的变量v结构体变量的定义v结构体类型的引用v指向结构体的指针v动态分配结构体的空间 程序设计 cs.sjtu 2011.9程序设计 - 25动态分配结构体的空间

10、动态分配结构体的空间v指向结构体指针的另一种用法是存储动 态申请到的内存的首地址。用法和申请 普通的动态变量一样。如:studentT *sp;sp = new studentT;程序设计 cs.sjtu 2011.9程序设计 - 26第第8 8章章 数据封装数据封装结构体结构体 v结构体的概述v结构体类型的定义v结构体类型的变量v结构体数组v结构体作为函数的参数v链表程序设计 cs.sjtu 2011.9程序设计 - 27结构体数组v用于描述个体的集合v定义格式:studentT studentArraySIZE;程序设计 cs.sjtu 2011.9程序设计 - 28结构体数组的引用v引用

11、数组的某一成员的成员studentArray3.namev数组成员之间相互赋值studentArray4 = studentArray2v结构数组的初始化 studentT studentArray5 = “00001”, 张三“, 80, 90,98 , , , ;程序设计 cs.sjtu 2011.9程序设计 - 29统计候选人得票。设有三个候选人,每次输入一个 得票的候选人名字,要求最后输出各人得票结果。 struct personT int id;int count; leader3= 0, 0,1, 0,2, 0; 程序设计 cs.sjtu 2011.9程序设计 - 30int ma

12、in() int i, j, inputID;for (i=1; i inputID;if (inputID 2) cout no name chinese math english data = x; / 把x放入新节点的数据成员中tmp-next = p-next; / 把新节点和p的下一成员相连p-next = tmp; /把p和新节点连接起来 程序设计 cs.sjtu 2011.9程序设计 - 52单链表操作删除把结点p后的结点删除headpdelPtrdelPtr=p-next;p-next=delPtr-next;delete delPtr; 程序设计 cs.sjtu 2011.9

13、程序设计 - 53单链表操作-建立v定义头指针:linkRec *head;v建立头结点申请空间设为头结点 head程序设计 cs.sjtu 2011.9程序设计 - 54单链表操作-建立(续)v逐个从键盘输入数据,存入链表 接受输入 申请空间 输入数据放入申请到的空间 链入链表尾 v置链表结束标志headabcd 程序设计 cs.sjtu 2011.9程序设计 - 55head = new linkRec; rear = head; Cin in_data; while(输入未结束) p= new linkRec;p-data = in_data;rear-next = p;rear=p;c

14、in in_data; rear-next = NULL; 程序设计 cs.sjtu 2011.9程序设计 - 56单链表操作输出headabcd p = head-next; while ( p != NULL) cout data;p = p-next; 程序设计 cs.sjtu 2011.9程序设计 - 57创建并访问一个带头结点的、存创建并访问一个带头结点的、存 储整型数据的单链表,数据从键储整型数据的单链表,数据从键 盘输入,盘输入,0 0为输入结束标志。为输入结束标志。 #include using namespace std;struct linkRec int data; li

15、nkRec *next; ;程序设计 cs.sjtu 2011.9程序设计 - 58int main() int x; /存放输入的值linkRec *head, *p, *rear;head = rear = new linkRec;while (true) /创建链表的其他结点cin x;if (x = 0) break;p = new linkRec; p-data = x; rear-next = p; rear = p;rear-next = NULL;/设置rear为表尾,其后没有结点了/读链表cout next;while (p != NULL) cout data next; cout n;/建立链表head = p = new node; p-data = 0; /p指向表尾for (i=1; idata =i; p-next = q; p = q; /将q链入表尾p-next = head; / 头尾相连 程序设计 cs.sjtu 2011.9程序设计 - 62/ 删除过程 q=head;while (q-next != q) /只要表非空 for (i = 0; inext;p-next = q-next; /绕过节点qcout data next; /让q指向报1的节点/ 打印结果 cout data endl;return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号