



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计 cs.sjtu 2011.9程序设计 - 1v结构体的概述结构体的概述v结构体类型的定义结构体类型的定义v结构体类型的变量结构体类型的变量v结构体数组结构体数组v结构体作为函数的参数结构体作为函数的参数v链表链表程序设计 cs.sjtu 2011.9程序设计 - 2v打印学生成绩单打印学生成绩单 ,格式如下:,格式如下:学号学号姓名姓名语文成绩语文成绩数学成绩数学成绩英语成绩英语成绩.00001张三张三96948800003李四李四89707600004王五王五908778如何在程序中表示这组学生信息?如何在程序中表示这组学生信息?程序设计 cs.sjtu 2011.9程序设计 -
2、3v用二维的数组来表示用二维的数组来表示该方案不可行,因为这些信息有不同的类型该方案不可行,因为这些信息有不同的类型v每一列用一个一维数组来表示,这种方法每一列用一个一维数组来表示,这种方法称为并联数组。称为并联数组。要保证每位学生信息的正确性很难要保证每位学生信息的正确性很难程序设计 cs.sjtu 2011.9程序设计 - 4v当我们考虑怎么逻辑地组织数据时,应该将一当我们考虑怎么逻辑地组织数据时,应该将一个人的所有信息项放在一起,即保持相关性。个人的所有信息项放在一起,即保持相关性。学号学号姓名姓名语文成绩语文成绩 数学成绩数学成绩 英语成绩英语成绩.00001张三张三969488000
3、03李四李四89707600004王五王五908778程序设计 cs.sjtu 2011.9程序设计 - 5学学生生一一00001张三张三969488学学生生二二00003李四李四897076学学生生三三00004王五王五908778记录记录在在C+中称为结构体中称为结构体程序设计 cs.sjtu 2011.9程序设计 - 6v结构体类型允许程序员把一些分量聚合结构体类型允许程序员把一些分量聚合成一个整体,用一个变量表示。成一个整体,用一个变量表示。v一个结构体的各个分量都有名字,把这一个结构体的各个分量都有名字,把这些分量称为成员些分量称为成员(member)。v由于结构体的成员可以是各种类
4、型的,由于结构体的成员可以是各种类型的,程序员能创建适合于问题的数据聚合。程序员能创建适合于问题的数据聚合。程序设计 cs.sjtu 2011.9程序设计 - 7v定义一个新的结构体类型定义一个新的结构体类型 v定义新类型的变量定义新类型的变量 v访问结构体变量访问结构体变量 程序设计 cs.sjtu 2011.9程序设计 - 8v结构体的概述结构体的概述v结构体类型的定义结构体类型的定义v结构体类型的变量结构体类型的变量v结构体数组结构体数组v结构体作为函数的参数结构体作为函数的参数v链表链表程序设计 cs.sjtu 2011.9程序设计 - 9v定义结构体类型中包括哪些分量定义结构体类型中
5、包括哪些分量v格式:格式:struct 结构体类型名结构体类型名字段声明;字段声明;如:如:struct studentT char no10; char name10; int chinese; int math; int english; ;程序设计 cs.sjtu 2011.9程序设计 - 10v字段名可与程序中的变量名相同字段名可与程序中的变量名相同 v在不同的结构体中可以有相同的字段名在不同的结构体中可以有相同的字段名 v结构体成员的类型可以是任意类型,当结构体成员的类型可以是任意类型,当然也可以是结构体类型然也可以是结构体类型程序设计 cs.sjtu 2011.9程序设计 - 11
6、struct dateTint month;int day;int year;struct studentT.dateT birthday; 程序设计 cs.sjtu 2011.9程序设计 - 12v结构体的概述结构体的概述v结构体类型的定义结构体类型的定义v结构体类型的变量结构体类型的变量v结构体数组结构体数组v结构体作为函数的参数结构体作为函数的参数v链表链表程序设计 cs.sjtu 2011.9程序设计 - 13v结构体变量的定义结构体变量的定义v结构体类型的引用结构体类型的引用v指向结构体的指针指向结构体的指针v动态分配结构体的空间动态分配结构体的空间 程序设计 cs.sjtu 201
7、1.9程序设计 - 14v结构体变量的定义和普通的变量定义一样。结构体变量的定义和普通的变量定义一样。如定义了结构体类型如定义了结构体类型studentT,就可以定义结,就可以定义结构体变量:构体变量: studentT student1;v一旦定义了一个结构体类型的变量,系统在一旦定义了一个结构体类型的变量,系统在分配内存时就会分配一块连续的空间,依次分配内存时就会分配一块连续的空间,依次存放它的每一个分量。这块空间总的名字就存放它的每一个分量。这块空间总的名字就是结构体变量的名字。内部还有各自的名字是结构体变量的名字。内部还有各自的名字 englishmathchinesenamenost
8、udent1程序设计 cs.sjtu 2011.9程序设计 - 15结构体变量的初始化结构体变量的初始化studentT student1= “00001”,“张三张三” ,87,90,77; 程序设计 cs.sjtu 2011.9程序设计 - 16struct 结构体类型名结构体类型名 字段声明;字段声明; 结构体变量;结构体变量;struct 字段声明;字段声明; 结构体变量;结构体变量;区别:前者可以继续用结构体类型名定义变量程序设计 cs.sjtu 2011.9程序设计 - 17v结构体变量的定义结构体变量的定义v结构体类型的引用结构体类型的引用v指向结构体的指针指向结构体的指针v动态
9、分配结构体的空间动态分配结构体的空间 程序设计 cs.sjtu 2011.9程序设计 - 18结构体变量的访问结构体变量的访问成员的表示:成员的表示: 结构变量名结构变量名.成员名成员名 如如: 如结构中还有结构,则一级一级用如结构中还有结构,则一级一级用”.”分开分开 ,如,如如:如:student1.birthday.yearv对结构体类型变量的引用一般为引用他对结构体类型变量的引用一般为引用他的成员的成员 程序设计 cs.sjtu 2011.9程序设计 - 19结构变量的赋值结构变量的赋值v结构体是一个统称。每个结构体类型在使用前都要先定义结构体是一个统称。每
10、个结构体类型在使用前都要先定义自己有哪些分量。系统事先无法知道如何处理他。自己有哪些分量。系统事先无法知道如何处理他。v因此,结构体变量的赋值通常是通过对它的每一个成员的因此,结构体变量的赋值通常是通过对它的每一个成员的赋值而实现。如:输入赋值而实现。如:输入student1的内容可用的内容可用: cin student1.no student1.chinese student1.math student1.english student1.birthday.year student1.birthday.month student1.birthday.day;v同类
11、型的结构变量之间可以相互赋值,如同类型的结构变量之间可以相互赋值,如Student1 = student2;将将student2的成员对应赋给的成员对应赋给student1的成员的成员程序设计 cs.sjtu 2011.9程序设计 - 20结构变量的输出结构变量的输出v结构体变量的输出通常是通过输出它的每一结构体变量的输出通常是通过输出它的每一个成员而实现。如:输出个成员而实现。如:输出student1的内容可的内容可用用: cout student1.no student1.chinese student1.math student1.english studen
12、t1.birthday.year student1.birthday.month 成员成员 如:如:sp-namestudent1.成员成员 -是所有运算符中优先级最高的是所有运算符中优先级最高的 通常程序员习惯使用第二种方法通常程序员习惯使用第二种方法程序设计 cs.sjtu 2011.9程序设计 - 24v结构体变量的定义结构体变量的定义v结构体类型的引用结构体类型的引用v指向结构体的指针指向结构体的指针v动态分配结构体的空间动态分配结构体的空间 程序设计 cs.sjtu 2011.9程序设计 - 25v指向结构体指针的另一种用法是存储动指向结构体指针的另一种用法是存储动态申请到的内存的首
13、地址。用法和申请态申请到的内存的首地址。用法和申请普通的动态变量一样。如:普通的动态变量一样。如: studentT *sp; sp = new studentT;程序设计 cs.sjtu 2011.9程序设计 - 26v结构体的概述结构体的概述v结构体类型的定义结构体类型的定义v结构体类型的变量结构体类型的变量v结构体数组结构体数组v结构体作为函数的参数结构体作为函数的参数v链表链表程序设计 cs.sjtu 2011.9程序设计 - 27 结构体数组结构体数组v用于描述个体的集合用于描述个体的集合v定义格式:定义格式: studentT studentArraySIZE;程序设计 cs.sj
14、tu 2011.9程序设计 - 28结构体数组的引用结构体数组的引用v引用数组的某一成员的成员引用数组的某一成员的成员 studentAv数组成员之间相互赋值数组成员之间相互赋值 studentArray4 = studentArray2v结构数组的初始化结构数组的初始化 studentT studentArray5 = “00001”, 张三张三“, 80, 90,98 , , , ;程序设计 cs.sjtu 2011.9程序设计 - 29统计候选人得票。设有三个候选人,每次输入一个统计候选人得票。设有三个候选人,每次输入一个得票的候选人名字,要求最后输出各人得票结果。得
15、票的候选人名字,要求最后输出各人得票结果。 struct personT int id; int count; leader3= 0, 0, 1, 0, 2, 0; 程序设计 cs.sjtu 2011.9程序设计 - 30int main() int i, j, inputID; for (i=1; i inputID; if (inputID 2) cout “废票废票”;continue; leaderinputID.count += 1; cout endl; for (i=0; i3; +i) cout leaderi.id “ “ leaderi.count); return 0;
16、程序设计 cs.sjtu 2011.9程序设计 - 31v与普通的指针一样,指向结构体的指针也与普通的指针一样,指向结构体的指针也能够用来指向一个结构体数组。此时,对能够用来指向一个结构体数组。此时,对指针加指针加1就是加了该结构体的大小。就是加了该结构体的大小。程序设计 cs.sjtu 2011.9程序设计 - 32v结构体的概述结构体的概述v结构体类型的定义结构体类型的定义v结构体类型的变量结构体类型的变量v结构体数组结构体数组v结构体作为函数的参数结构体作为函数的参数v链表链表程序设计 cs.sjtu 2011.9程序设计 - 33v尽管结构体和数组一样也有许多分量组尽管结构体和数组一样
17、也有许多分量组成,但结构体的传递和普通内置类型是成,但结构体的传递和普通内置类型是一样的。它是将实际参数中的每个分量一样的。它是将实际参数中的每个分量复制到形式参数的每个分量中。复制到形式参数的每个分量中。程序设计 cs.sjtu 2011.9程序设计 - 34Void printPerson(PersonT p)程序设计 cs.sjtu 2011.9程序设计 - 35v因为结构体是值传递,当希望把函数内部对结构因为结构体是值传递,当希望把函数内部对结构体的修改返回给主调函数时,可以用指针传递或体的修改返回给主调函数时,可以用指针传递或引用传递引用传递v由于结构体一般占用的内存量都比较大,值传
18、递由于结构体一般占用的内存量都比较大,值传递既浪费空间又浪费时间。因此可用指针传递或引既浪费空间又浪费时间。因此可用指针传递或引用传递用传递v指针传递形式比较繁琐,所以指针传递形式比较繁琐,所以C+C+通常用引用传递通常用引用传递v引用传递的问题是函数中可以修改实际参数,要引用传递的问题是函数中可以修改实际参数,要控制函数中不能修改实际参数,可以加控制函数中不能修改实际参数,可以加constconst限定限定程序设计 cs.sjtu 2011.9程序设计 - 36v和普通的指和普通的指针传递一样,针传递一样,函数中可以函数中可以通过指针访通过指针访问主调函数问主调函数的记录的记录v减少函数调减
19、少函数调用时的数据用时的数据传递量传递量Void PrintPerson(personT &p);Void PrintPerson(const personT &p);程序设计 cs.sjtu 2011.9程序设计 - 37v设计一函数,打印学生信息设计一函数,打印学生信息程序设计 cs.sjtu 2011.9程序设计 - 38Void PrintStudent(studentT s)cout s.no t t s.chinese t s.math t s.english endl;缺点:浪费时间空间缺点:浪费时间空间程序设计 cs.sjtu 2011.9程序设计
20、 - 39Void PrintStudent(studentT *s) cout no t name t chinese t math t english endl;Void PrintStudent(studentT &s) cout s.no t t s.chinese t s.math t s.english endl;缺点:不安全缺点:不安全程序设计 cs.sjtu 2011.9程序设计 - 40Void PrintStudent(const studentT &s)cout s.no t t s.chinese t s.math t s.e
21、nglish data = x; / 把把x放入新节点的数据成员中放入新节点的数据成员中tmp-next = p-next; / 把新节点和把新节点和p的下一成员相连的下一成员相连p-next = tmp; /把把p和新节点连接起来和新节点连接起来 程序设计 cs.sjtu 2011.9程序设计 - 52单链表操作单链表操作删除删除把结点把结点p后的结点删除后的结点删除headpdelPtr delPtr=p-next;p-next=delPtr-next;delete delPtr; 程序设计 cs.sjtu 2011.9程序设计 - 53单链表操作单链表操作-建立建立v定义头指针:定义头指
22、针: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
23、linkRec; p-data = in_data; rear-next = p; rear=p; cin 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#include using namespace std; struct linkRec int data; linkRec *next;程序设计 cs.sjtu 20
24、11.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 endl; return 0;程序设计 cs.sjtu 2011.9程序设计 - 59v链表的概念链表的概念v链表的存储链表的存储v链表的操作链表的操作v循环链表循环链表程序设计 cs.sjtu 2011.9程序设计 - 60例:例:n个人围成一圈,从第一个人开始报数个人围成一圈,从第一个人开始报数1、2、3。凡报到。凡报到 3者退出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音像制品进口管理办法
- 北交所科技成长产业跟踪第二十八期:小马智行与广州公交集团合作推动自驾技术商业化应用关注北交所无人车概念企业
- 基于2025年农村人居环境整治的社会稳定风险评估与城乡融合发展报告
- 智能化改造对城市污水处理厂运营效率提升的影响报告
- 线下演出市场2025年演出市场政策法规解读与合规报告
- 商业地产项目数字化运营策略与客户体验反馈机制优化报告
- 食品行业食品安全追溯体系与RFID技术应用现状与发展趋势报告
- 工业互联网平台2025年异构数据库融合技术在化工行业中的化工行业市场前景分析报告
- 智慧养老服务平台项目投资回报率分析与可行性报告
- 答题万能公式概要1
- 国家开放大学国开电大《统计与数据分析基础》形考任务1-4 参考答案
- 2025年数字道闸项目市场调查研究报告
- 幼儿园中班科学《荷花》课件
- 陕西民间艺术审美与文化知到智慧树期末考试答案题库2025年西北工业大学
- GB/T 6148-2025精密电阻合金电阻温度系数测试方法
- 风电居间合同协议书
- 浙江开放大学2025年《社会保障学》形考任务4答案
- 中国海洋工程行业市场发展分析及前景趋势与投资前景研究报告
- 2025年大学辅导员招聘考试题库时事政治专项试卷
- 酱料研发知识培训课件
- 2025核辐射突发事件放射性污染人员洗消流程及技术要求
评论
0/150
提交评论