C语言入门经典(第四版)11-结构化数据
C语言算法表示及结构化程序设计基本结构
C语言算法表示及结构化程序设计基本结构
为了表示一个算法,可以用不同的方法。常用的方法有:自然语言、传统流程图、结构化流程图和伪代码等。
1用自然语言表示算法
自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示通俗易懂,但文字冗长,容易出现歧义,往往要根据上下文才能判断正确含义。用自然语言来描述包含分支选择和循环算法不方便,花开两朵,各表一枝,同时只表达一个意思,这是自然语言表示的不足。
2用流程图表示算法
流程图就是用一些图框来表示算法,直观形象,易于理解。如:菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立来判定如何执行其后的操作。它有一个入口,两个或多个出口。优于自然语言表示。连接点小圆圈用于将画在不同地方的流程线连接起来,实际上表示一个对象,只是画不下オ分开来画或为了清晰表示而单独绘制,用连接点可以避免流程线出现交叉或过长,不利于阅读。
用流程图表示算法直观形象,比较清楚地显示出各个框之间的逻辑关系。这种流程图占用篇幅较多,一条路走到头,与复杂的实际情况表示有差距有不足,尤其当算法比较复杂时就费时费力。
3.传统流程图的弊端与结构化设计的基本结构
传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制,不受限制地使流程随意地转来转去,使流程图变得毫无规律,阅读时要花很大精力去追踪流程,使人难以理解算法的逻辑。为了提高算法的质量,使算法的设计和阅读方便,不允许无规律地使流程随意转向,只能顺序地进行下去。但是,算法上难免会包含一些分支和循环,而不可能全部由一个个顺序框组成。
数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)
数据结构(第4版)习题及实验参考答案数据结构复习
资料完整版(c语言版)
数据结构基础及深入及考试
习题及实验参考答案见附录
结论
1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上
描述数据,它与数据的存储无关,是独立于计算机的。2、数据的物理结
构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列
3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它
由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据
类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐
蔽(独立于计算机)。
4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
5、在数据结构中,从逻辑上可以把数据结构分成(C)A、动态结构
和表态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内
部结构和外部结构6、算法的时间复杂度取决于(A)
A、问题的规模
B、待处理数据的初态
C、问题的规模和待处理数据的
初态
线性表
1、线性表的存储结构包括顺序存储结构和链式存储结构两种。
2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个
元素的概率相等时,插入一个元素所需移动元素的平均次数为(E),删
除一个元素需要移动的元素的个数为(A)。
A、(n-1)/2
B、n
C、n+1
D、n-1
E、n/2
F、(n+1)/2
G、(n-2)/23、“线
性表的逻辑顺序与存储顺序总是一致的。”这个结论是(B)A、正确的B、错误的C、不一定,与具体的结构有关
C语言开发基础教程(Dev-C++) 第11章 常见的数据结构
11.1.3 链表的实现
int insertHead(pHead *ph, int data){
//创建新节点
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
if (NULL == newNode)
return -1;
newNode->data = data;
✎
11.1.3 链表的实现
3、删除节点 单链表只能根据当前节点的next指针找到后继节点,不能由当前节点 找到其前驱节点;前驱节点指向后继节点后,亦无法利用前驱节点访 问已删除的节点。 综上所述,在执行删除操作之前,应先找到并记录待删除节点和其前 驱节点,释放删除节点后,前驱节点指针域保存删除节点的后继节点 地址。
✎
第11章 常见的数据结构
· 链表 ·栈 · 队列
✎
11.1 链表
链表是线性表的一种。线性表是由具有相 同特性的数据元素组成的一个有限序列, 在C语言中,线性表有顺序存储和链式存 储两种结构,其中以顺序形式存储的线性 表称为顺序表,以链式存储的线性表称为 链表。
✎
11.1 链表
C语言中的数组、字符串都可视为存储 简单数据的顺序表,顺序表必须占用一 整块事先分配好的、大小固定的存储空 间,这不利于内存空间管理,因此在对 数据灵活性要求较高的程序中,一般会 使用链表存储数据。
C++C语言第11章_结构体
22
11.5 结构体数组
当然,数组的初始化也可以用以下形式: struct student 结构体数组初始化的一般形 {int num; 式是在定义数组的后面加上 … “={初值表列};”。 }; struct student str[]={{…},{…},{…}}; 即先声明结构体类型,然后定义数组为该 结构体类型,在定义数组时初始化。
21
11.5 结构体数组 11.5.2 结构体数组的初始化
与其他类型的数组一样,对结构体数组可以 初始化。例如: struct student {int num;char name[20]; char sex; int age; float score; char addr[30]; } stu[3]={{ 89031,”Li Lin”,’M’,”123 Beijing Road”},{10102,”Zhangyi”,…}, {10103,…}}; 图11-5
第十一章
本章要点
结构体的概念 结构体的定义和引用 结构体数组
主要内容 11.1 概述 11.2 定义结构体类型变量的方法 11.3 结构体变量的引用 11.4 结构体变量的初始化 11.5 结构体数组 11.6 指向结构体类型数据的指针 11.8 共用体
11.1
概述
C语言 第四章 数据类型共14页文档
C语言第四章数据类型第四章数据类型
4.1这是个有类型的世界
4.2数据类型基本概念
4.2.1理解数据类型
4.2.2理解整型和实型
4.2.3理解数值的范围
4.2.4理解有符号数和无符号数
4.3字符集和保留字
4.3.1字符集
4.3.2保留字
4.4基本数据类型
4.4.1字符型和各种整型、实型
4.4.2布尔型(bool)和无类型(void)
4.4.3为数据类型起别名:typedef 4.5 sizeof的使用
4.5.1 sizeof例程
4.1这是个有类型的世界
问大家一个问题:
现实生活,有哪些信息可以用计算机可以管理呢?
职工、学员、客户、工资、原材料、产品、商品…现实中实现用计算机管理的信息已是无数。
职工又有什么信息呢?
职工有姓名、性别、出生年月、家庭住址、电话,婚否、工龄、工种、工资、等等。
这两个问题你可能回答得不错,现在,考验你前几章有没有认真学习的时刻到了,请看下面这个问题:
所有的这些信息,在计算机里都是以什么样的数据形式来表达呢?请自觉闭上眼睛,想一想。再看以下的各种回答。
"二进数",正确。
"已数字化的数据",也算正确。
"0和1",正确。
"机器语言",正确,你还记得第一章的内容啊,不错。
本章需要继续的一个问题就由此开始。所有的信息都用机器语言--那些0和1--表达,那你我编写程序岂不很难?
这是第一章的问题,你还记得在第一章关于本问题回答吗?那就是:机器语言不好记,那就用高级语言。高级语言高级在哪里呢?第一章也有答案:就高级在它尽量向"高级动物"的思维习惯做了一些接近。当然,只能说尽量,它必须仍然保持符合机器的绝大部分特点,否则,大家就不要学计算机语言了。
C语言第十一章课件
sex:%c\n”,(*p).num,(*p).name, (*p).sex);
}
引用结构体成员的三种形式:
结构体变量名.成员名 (*p).成员名
指向运算符。其优先级 高于自增、自减运算符
p- >成员名
试分析以下运算:
p->n 得到p指向的结构体变量中的成员n的值 p->n++ 得到p指向的结构体变量中的成员n的值,
例题:设有三个候选人,每次输入一个得票的候选人的名字,要求 最后输出各人得票结果。
struct person { char name[20];
int count; }leader[3]={“Li”,0,”zhang”,0,”Liu”,0};
main( ) { int i, j;
char leader_name[20]; for( i=1;i<=10;i++)
char ch;
float f;}a,b,c;
或
或
union data
{int i; char ch; 先定义 float f; 类型
};
union data a,b,c;
union {int i; char ch; float f; } a,b,c;
源自文库直接 定义
注意共用体类型变量与结构体类型变量的 区别
printf(“No.:%ld\nname%s\n
C语言_第11章
11.1.2 结构体变量的定义
2. 定义结构体类型时,同时定义变量
struct student
{
int num;
char name[20];
char sex;
float score;
} stu1, stu2;
/*多个变量名之间使用逗号分隔*/
11.1.2 结构体变量的定义
3. 直接定义结构体类型变量
11.1.4 结构体变量的初始化
一般形式: struct 结构体类型名 {
结构体成员列表; } 变量名 = {初始化列表};
例如: struct student {
int num; char name[20]; char sex; float score; } stu = {10345, “Liming”, ‘m’, 75.5}; 初始化时,初始化值类型要与成员的类 型一一对应
姓名
学生
学号
性别
成绩
11.1.1 结构体类型的概念
定义结构体的一般形式: struct 结构体名 {
成员列表 }; 成员列表形式为:类型说明符 成员名; 成员之间使用分号分隔
例如: struct student {
int num; char name[20]; char sex; float score; };
struct
/*直接定义结构体变量,省略结构体类型名*/
11《C语言与数据结构》教学大纲1
《C语言与数据结构》教学大纲
适用专业:电子商务物流管理(普通高职)总学时:150
一、本课程的目的与任务
本课程是电子商务、物流管理专业的一门必修技术基础课。其任务是使学生掌握从事软件开发工作的高素质劳动者和中初级专门人才必备的程序设计方面的基本理论、基本知识和基本技能,培养编程能力;为用C语言进行软件编程打好基础。
二、教学内容和教学要求
第一章 C语言概述
教学内容:
1、C语言出现的历史背景。
2、C语言的特点。
3、C语言的程序介绍。
4、C语言的上机步骤。
教学要求:
1、了解C语言在软件开发中的地位、C语言简介。
2、理解软件的可靠性。
3、掌握C语言上机步骤。
3、掌握算法分析的的方法。
实验内容及要求
1、C语言程序的运行
了解VC++6.0 系统的基本操作方法,学会独立使用该系统。
掌握在VC++6.0系统上运行C程序的步骤。
第二章数据类型与基本运算
教学内容:
1、C的数据类型。
2、常量、变量、标识符。
3、整数类型、实数类型和字符类型数据。
4、变量赋值。
5、算术运算符和算术表达式。
6、赋值表达式和逗号表达式。
7、putchar函数、getchar函数。
8、printf 函数、scanf 函数。
教学要求:
1、了解C的数据类型。
2、理解常量、变量、标识符的定义。
3、掌握整数类型、实数类型和字符类型数据,变量赋值方法,赋值表达式和逗号表达式。
4、熟练掌握算术运算符和算术表达式。
5、掌握printf 函数、scanf 函数、putchar函数、getchar函数的语法。
6、熟练掌握用printf 函数、scanf 函数进行输出和输入。
数据结构使用C语言(第4版).PPT课件
合。
抽象数据类型是指一个逻辑概念上的类型和这个类型
上的操作集合。
数据类型和抽象数据类型的不同之处仅仅在于数 据类型指的是高级程序设计语言支持的基本数据类型, 而抽象数据类型指的是在基本数据类型支持下用户新 设计的数据类型。
-
10
抽象数据类型使软件设计成为工业化流水线生产 的一个中间环节。一方面,根据给出的抽象数据类型
}
解:设基本语句的执行次数为f(n),有f(n)=c1×n2+ c2×n3,因 T(n)= f(n)=c1×n2+ c2×n3≤c × n3, 其中c1 , c2 , c均为常数,所以该算法的时间复杂度为
T(n)=O(n3)
-
17
例1-4 设n为如下算法处理的数据个数,求如下算法的时 间复杂度。
for(i=1;i<=n;i=2*i) cout<<"i="<<i;
void Reverse(int n, DataType a[]) {
int i,m=n/2; DataType temp; for(i=0;i<m;i++) //进行m次调换 {
temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } }
-
数据结构(第4版)习题及实验参考答案 数据结构复习资料完整版(c语言版)
数据结构基础及深入及考试
复习资料
习题及实验参考答案见附录
结论
1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列
3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。
4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
5、在数据结构中,从逻辑上可以把数据结构分成( C )
A、动态结构和表态结构
B、紧凑结构和非紧凑结构
C、线性结构和非线性结构
D、内部结构和外部结构
6、算法的时间复杂度取决于( A )
A、问题的规模
B、待处理数据的初态
C、问题的规模和待处理数据的初态线性表
1、线性表的存储结构包括顺序存储结构和链式存储结构两种。
2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( E ),删除一个元素需要移动的元素的个数为( A )。
A、(n-1)/2
B、n
C、n+1
D、n-1
E、n/2
F、(n+1)/2
G、(n-2)/2
3、“线性表的逻辑顺序与存储顺序总是一致的。”这个结论是( B )
A、正确的
B、错误的
C、不一定,与具体的结构有关
4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D )
C程序课件第11章结构
2021/3/20
26
(4)可以引用结构体变量成员的地址(用于输 入),也可以引用结构体变量的地址(用于输出, 传递)。结构体变量的地址主要用于作函数参数, 传递结构体的地址。如:
scanf(“%d”,&student1.num); /*输入student1.num的值(间接)*/
printf(“%o”,&student1); /*输出student1的首地址*/
char sex;
int age;
float score;
char addr[30];
};
2021/3/20
6
上面的程序段指定了一个新的结构体类型 struct student(struct是声明结构体类型时 所必需使用的关键字,不能省略),它向编 译系统声明这是一个“结构体类型”,它包 括num、name、sex、age、score、addr等 不同类型的数据项。应当说明struct student 是一个类型名,它和系统提供的标准类型 (如int、char、float、double等)一样具有 同样的地位和作用,都是用来定义变量的类 型,只不过结构体类型需要由用户自己指定 而已。注意不要省略最后的分号。
(3)对结构体变量的成员可以像普通变量 一样进行各种运算(根据其类型决定可以进 行的运算)。例如:
student2.score=student1.score;
数据结构(C语言版)(第4版)习题
习题1
1.1选择题。
(1)计算机识别、存储和加工处理的对象统称为。
A.数据B.数据元素C.数据结构D.数据类型
(2)数据结构通常是研究数据的及它们之间的联系。
A.存储和逻辑结构B.存储和抽象
C.理想和抽象
D.理想和逻辑
(3)下列不是数据的逻辑结构的是。
A.散列结构 B.线性结构 C.树形结构 D.图状结构(4)数据结构被形式地定义<D,R>,其中D是的有限集,R是___的有限
集。
A.算法 B.数据元素C.数据操作 D.逻辑结构
(5)组成数据的基本单位是。
A.数据项 B.数据类型 C.数据元素 D.数据变量(6)设数据结构A=(D,R),其中,D={1,2,3,4},R={r},r={<1,2>,<2,3 >,<3,4>,<4,1>},则数据结构A是。
A.线性结构 B.树形结构 C.图状结构 D.集合
(7)数据在计算机存储器中表示时,若物理地址与逻辑地址相同并且是连续的,则称为。
A.存储结构B.逻辑结构
C.顺序存储结构D.链式存储结构
(8)在数据结构的讨论中把数据结构从逻辑上分。
A.内部结构与外部结构B.静态结构与动态结构
B.线性结构与非线性结构 D.紧凑结构与非紧凑结构
(9)对于一个算法的评价,不包括以下方面的内容。
A.健壮性和可读性
B.并行性
C.正确性
D.时间空间复杂度
(10)算法分析的两个方面是。
A.空间复杂性和时间复杂性B.正确性和简明性
C.可读性和文档性 D.数据复杂性和程序复杂性
1.2填空题
(1)数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间的和运算等的学科。
C语言入门经典(第四版)1 C语言编程.
C入门经典(第4版)
1.1 创建C程序
C程序的创建过程有4个基本步骤或过程:编辑,编译,链接,执行。这 些过程很容易完成(就像翻转手臂一样简单,而且可以随时翻转),首先介绍每 个过程,以及它们对创建C程序的作用 。 编辑 编译 链接 执行
C入门经典(第4版)
1.1.1 编辑
编辑过程就是创建和修改C程序的源代码——我们编写的程序指令称为源 代码。有些C编译器带一个编辑器,可帮助管理程序。通常,编辑器是提供了 编写、管理、开发与测试程序的环境,有时也称为集成开发环境(缩写为IDE)。
执行阶段就是当成功完成了前述3个过程后,运行程序。但是,这个阶段 可能会出现各种错误,包括输出错误及什么也不做,甚至使计算机崩溃。不管 出现哪种情况,都必须返回编辑阶段,检查并修改源代码。
C入门经典(第4版)
1.2 创建第一个程序
本节先浏览一下创建C语言程序的流程,从输入代码到执行程序的所有4 个步骤。在这个阶段,若不了解所键入的代码信息,别担心,笔者会解释每一 个步骤。
C入门经典(第4版)
1.1.3 链接
链接器(linker)将源代码文件中由编译器产生的各种模块组合起来,再从C语 言提供的程序库中添加必要的代码模块,将它们组合成一个可执行的文件。链 接器也可以检测和报告错误,例如,遗漏了程序的某个部分,或者引用了一个 根本不存在的库组件。
数据结构(第4版)习题及实验参考答案 数据结构复习资料完整版(c语言版)
数据结构基础及深入及考试
复习资料
习题及实验参考答案见附录
结论
1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列
3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。
4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
5、在数据结构中,从逻辑上可以把数据结构分成( C )
A、动态结构和表态结构
B、紧凑结构和非紧凑结构
C、线性结构和非线性结构
D、内部结构和外部结构
6、算法的时间复杂度取决于( A )
A、问题的规模
B、待处理数据的初态
C、问题的规模和待处理数据的初态线性表
1、线性表的存储结构包括顺序存储结构和链式存储结构两种。
2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( E ),删除一个元素需要移动的元素的个数为( A )。
A、(n-1)/2
B、n
C、n+1
D、n-1
E、n/2
F、(n+1)/2
G、(n-2)/2
3、“线性表的逻辑顺序与存储顺序总是一致的。”这个结论是( B )
A、正确的
B、错误的
C、不一定,与具体的结构有关
4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D )
C语言大学教程C语言第11章
编辑课件
4
第11章 文件处理
11.2 数据的层次结构
编辑课件
5
第11章 文件处理
11.3 文件与流
文件与字符流相对应
标准输入流 :stdin 标准输出流 : stdout 标准错误流 : stderr
编辑课件
2
第11章 文件处理
11.1 引言
将数据存储在变量或者数组中,都只能是暂 时的
程序运行结束时,这些数据就会丢失
文件是用来永久存储数据的。
文件可长久储存在硬盘、U盘、光盘等存储器上。
编辑课件
3
第11章 文件处理
11.2 数据的层次结构
位 :最简单的数据项 ,用0和1表示 字符 :8位二进制数。包括数字、字母等 域 :由一组表示特定意义的字符构成。 记录 :由一组相关的域构成。
printf( "创建文件 datasize.dat
2 Reading and printing a
Sequential file */
3 #include <stdio.h>
4
5 int main( void )
6 {
7 int account;
编辑课件
22
第11章 文件处理
C语言程序设计1-6章 (第四版)
目标程序
C源程序 (无预处理命令) (有预处理命令)
链接
执行程序
编译预处理
2013-7-26
华东理工大学出版社
编译预处理命令有三种:
宏定义
无参数宏定义 有参数宏定义(7.7节介绍) 文件包含 条件编译
返回
2013-7-26
华东理工大学出版社
1.4.1 无参数宏定义 无参数宏定义的格式为: #define 【例】#define PI
2013-7-26
华东理工大学出版社
1.3.3 关键字 C编译系统已经预定义的、具有特殊用途的保留标识 符称为关键字。具体见书P7。
1.4 编译预处理
编译预处理是C编译系统的一个组成部分。 功能:告诉编译系统在对源程序进行编译之前应该
做些什么。
返回
2013-7-26
华东理工大学出版社
图1 编译预处理的执行过程
文件包含是通过编译预处理命令#include把另一个文件的全
部内容包含到本文件之中。命令格式有两种: #include ―文件名‛
先在源文件目录中检索文件,没找到再按 系统指定的标准方式检索文件目录
【例】#include ―C:\TC\CC1\file2.c‖ #include <文件名>
按系统指定的标准方式检索文件目录
2013-7-26
华东理工大学出版社
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C入门经典(第4版) 入门经典( 11.2.2 声明结构中的结构 11.
可以在horse结构的定义中声明Date结构,如下: 可以在horse结构的定义中声明Date结构,如下: struct horse { struct Date { int day; int month; int year; } dob; int height; char name[20]; char father[20]; char mother[20]; };
11.1 数据结构:使用 11.1 数据结构:使用struct
关键字struct能定义各种类型的变量集合,称为结构(structure),并把它 关键字struct能定义各种类型的变量集合,称为结构(structure),并把它 们视为一个单元 . 定义结构类型和结构变量 访问结构成员 未命名的结构 结构数组 表达式中的结构 结构指针 为结构动态分配内存
C入门经典(第4版) 入门经典(
11.1.2 访问结构成员 11.1.2
现在知道如何定义结构及声明结构变量了,还必须引用结构的成员.结 构变量的名称不是一个指针,所以需要特殊的语法访问这些成员. 要引用结构成员,应在结构变量名称的后面加上一个句点,再加上成员 变量名称.例如,发现Dobbin隐瞒了它的年龄,事实上它比初始化的值年轻, 变量名称.例如,发现Dobbin隐瞒了它的年龄,事实上它比初始化的值年轻, 就可以将值修正如下: Dobbin.age = 12;
C入门经典(第4版) 入门经典( 11.2.1 将一个结构作为另一个结构 11.
的成员
本章的开头为满足马饲养员的需要,设计了一个程序,处理每匹马的各 种数据,包括名字,身高和生日等,但程序11.1用年龄代替了生日.其部分原 种数据,包括名字,身高和生日等,但程序11.1用年龄代替了生日.其部分原 因是日期处理起来比较麻烦,要用3 因是日期处理起来比较麻烦,要用3个数值表示,还要处理闰年的问题.现在 准备将一个结构作为另一个结构的成员来处理日期 .
C入门经典(第4版) 入门经典(
11.1.6 结构指针 11.1.6
要获得结构的地址,就需要使用结构的指针.由于需要的是结构的地址, 因此需要声明结构的指针.结构指针的声明方式和声明其他类型的指针变量相 同,例如: struct horse *phorse; 这条语句声明了一个phorse指针,它可以存储horse类型的结构地址.现 这条语句声明了一个phorse指针,它可以存储horse类型的结构地址.现 在可以将phorse设置为一个特定结构的地址值,使用的方法和其他类型的指针 在可以将phorse设置为一个特定结构的地址值,使用的方法和其他类型的指针 完全相同,例如: phorse = &My_horses[1];
C入门经典(第4版) 入门经典( 11.2.5 结构中的位字段 11.
位字段(bit-fields)提供的机制允许定义变量来表示一个整数中的一个或多 位字段(bit-fields)提供的机制允许定义变量来表示一个整数中的一个或多 (bit 个位,这样,就不需要为每个位明确指定成员名称了.
C入门经典(第4版) 入门经典(
C入门经典(第4版) 入门经典( 11.2.4 双向链表 11.
前一个例子创建的链表有一个缺点:只能往前走.其实,只需小小的修 改,就可以得到双向链表(doubly 改,就可以得到双向链表(doubly linked list),可以双向遍历链表.方法是除了 list),可以双向遍历链表.方法是除了 指向下一个结构的指针外,在每个结构中再添加一个指针,存储前一个结构的 地址 .
C入门经典(第4版) 入门经典(
11.1.3 未命名的结构 11.1.3
不—定要给结构指定标记符名字.用一条语句声明结构和该结构的实例 时,可以省略标记符名字.在上一个例子中,声明了horse类型和该类型的实 时,可以省略标记符名字.在上一个例子中,声明了horse类型和该类型的实 例My_first_horse,也可以改为: My_first_horse,也可以改为: struct { /* Structure declaration and... */ int age; int height; char name[20]; char father[20]; char mother[20]; } My_first_horse; /* ...structure variable declaration combined */ 使用这种方法的最大缺点是不能在其他语句中定义这个结构的其他实例. 这个结构类型的所有变量必须在一行语句中定义.
C入门经典(第4版) 入门经典( 11.2.3 将结构指针用作结构成员 11.
任何指针都可以是结构的成员,包含结构指针在内.结构成员指针可以 指向相同类型的结构.例如,horse类型的结构可以含有一个指向horse类型结 指向相同类型的结构.例如,horse类型的结构可以含有一个指向horse类型结 构的指针.
C入门经典(第4版) 入门经典( 第11章 结构化数据 11章
前面学习了如何声明和定义变量,使之包含各种类型的数据,如整数, 浮点数和字符等.学习了如何创建这些类型的数组及指针数组,这些指针指向 包含可用数据类型的内存位置.这些很有用,但是许多应用程序还需要一些更 灵活的功能 .
C入门经典(第4版) 入门经典(
C入门经典(第4版) 入门经典(
11. 11.3.Leabharlann Baidu 修改程序
下面创建一个例子,将结构指针作为变元和返回值.修改前一个例子( 下面创建一个例子,将结构指针作为变元和返回值.修改前一个例子(程序 11.6),在Family类型的结构中声明一些额外的指针p_to_pa和p_to_ma,如下 11.6),在Family类型的结构中声明一些额外的指针p_to_pa和p_to_ma,如下 所示: struct Family /* Family structure declaration */ { struct Date dob; char name[20]; char father[20]; char mother[20]; struct Family *next; /* Pointer to next structure */ struct Family *previous; /* Pointer to previous structure */ struct Family *p_to_pa; /* Pointer to father structure */ struct Family *p_to_ma; /* Pointer to mother structure */ };
C入门经典(第4版) 入门经典(
11.1.5 表达式中的结构 11.1.5
结构中的成员可以像一般变量那样用于表达式.以程序11.2中的结构为例, 结构中的成员可以像一般变量那样用于表达式.以程序11.2中的结构为例, 可以将它们用在下面的表达式中: My_horses[1].height = (My_horses[2].height + My_horses[3].height]/2; —匹马的高度是另两匹马的平均高度是没什么道理的,但这是一个合法 的语句.也可以在赋值语句中使用整个结构元素. My_horses[1] = My horses[2];
C入门经典(第4版) 入门经典(
11.3.3 作为函数返回值的结构 11.
函数返回结构和返回一般数值一样,只是在函数原型中,要以正常的方 式指出函数返回的是结构,例如: struct horse my_fun(void); 这个函数原型说明,它是一个没有变元的函数,返回horse类型的结构. 这个函数原型说明,它是一个没有变元的函数,返回horse类型的结构. 可以像这样从函数返回一个结构,但比较方便的做法是返回结构指针
11. 11.3 结构与函数
结构表示C 结构表示C语言的一个强大特性,因此它与函数并用非常重要.现在探讨 如何把结构当成变元传递给函数,以及如何从函数中返回结构 . 结构作为函数的变元 结构指针作为函数变元 作为函数返回值的结构 修改程序 二叉树
C入门经典(第4版) 入门经典(
11.3.1 结构作为函数的变元 11.
C入门经典(第4版) 入门经典(
11.3.2 结构指针作为函数变元 11.
在调用函数时,传送给函数的是变元值的副本.如果变元是一个非常大 的结构,就需要相当多的时间,并占用结构副本所需的内存.在这种情况下, 应该使用结构指针作为变元.这可以避免占用内存,节省复制的时间,因为只 需复制指针.函数可以通过指针直接访问原来的结构.另外,使用指针给函数 传送结构,也提高了效率.重写siblings()函数,如下: 传送结构,也提高了效率.重写siblings()函数,如下: bool siblings(struct family *member1, struct family *member2) { if(strcmp(member1if(strcmp(member1->mother, member2->mother) == 0) member2return true; else return false; }
C入门经典(第4版) 入门经典(
11.1.4 结构数组 11.1.4
保存马匹数据的基本方法就是这样,但在处理50或100匹马如此大量的数据 保存马匹数据的基本方法就是这样,但在处理50或100匹马如此大量的数据 时会比较麻烦,此时需要一个更可靠的方法去处理大量的马匹数据.使用变量 也会遇到这个问题.此时解决方法是使用数组,这里也可以声明一个horse数 也会遇到这个问题.此时解决方法是使用数组,这里也可以声明一个horse数 组.
C入门经典(第4版) 入门经典( 11.2 再探结构成员 11.
前面说过,所有基本数据类型(包含数组) 前面说过,所有基本数据类型(包含数组)都可以成为结构的成员.除此之 外,还可以把一个结构作为另一个结构的成员,不仅指针可以是结构的成员, 结构指针也可以是结构的成员 . 将一个结构作为另一个结构的成员 声明结构中的结构 将结构指针用作结构成员 双向链表 结构中的位字段
将结构作为变元传给函数和传递一般变量没有什么不同.创建类似于horse的 将结构作为变元传给函数和传递一般变量没有什么不同.创建类似于horse的 结构,如下: struct family { char name[20]; int age; char father[20]; char mother[20]; };
C入门经典(第4版) 入门经典(
11.1.1 定义结构类型和结构变量 11.1.1
可以将结构的声明和结构变量的声明分开.取代前面例子的语句如下: struct horse { int age; int height; char name[20]; char father[20]; char mother[20]; }; struct horse Dobbin = { 24, l7, "Dobbin", "Trigger", "Flossie" };
C入门经典(第4版) 入门经典(
11.1.7 为结构动态分配内存 11.1.7
可以利用前面掌握的各种工具重写程序11.2,以更经济的方式使用内存. 可以利用前面掌握的各种工具重写程序11.2,以更经济的方式使用内存. 程序11.2的最初版本为包含50个horse结构的数组分配了内存,而实际上并不 程序11.2的最初版本为包含50个horse结构的数组分配了内存,而实际上并不 需要这么多内存. 要为结构动态分配内存,可以使用结构指针数组,其声明非常简单,如 下所示: struct horse *phorse[50]; 这行语句声明了50个指向horse结构的指针数组.该语句只给指针分配了 这行语句声明了50个指向horse结构的指针数组.该语句只给指针分配了 内存.还需要分配一些内存来存储每个结构的成员.