C语言.docx
《C语言.docx》由会员分享,可在线阅读,更多相关《C语言.docx(8页珍藏版)》请在冰豆网上搜索。
C语言
day16
联合
联合也可以包含多个不同类型的变量
联合中的所有变量占据同一块内存空间
联合可以节省内存空间的使用
指针变量是用来记录地址数据的变量
指针变量时分种类的
NULL表示空地址
记录无效地址的指针叫做野指针
指针可以参与如下的计算
指针+ 整数 , 指针 - 整数,指针 - 指针
以上计算的结果都和指针的类型有关
void*也是一种指针类型
这种类型的指针变量可以记录任何地址数据
在使用的时候要先进行类型转换
指针变量和数组名称在很多时候可以相互替代
1.数组名称不可以被赋值
2.进行sizeof计算的结果不同
3.取地址计算的结果不同
声明指针是可以使用const关键字
const关键字加在不同的地方有不同的效果
指针变量可以作为函数的形参和返回值使用
可以在调用函数和被调用函数之间共享同样的普通变量
不可以把普通局部变量的地址记录到返回值变量中
二级指针变量用来记录已经指针变量的地址
二级指针变量可以用来表示三个不同的变量
malloc函数可以从堆中分配连续若干个字节
malloc函数把分配得到的第一个字节的地址记录在返回值变量中
如果分配失败则返回值变量中记录NULL
free函数用于释放堆中变量的空间
堆中的所有变量在程序结束之前必须要释放
指针类型的返回值和二级指针类型的形参可以实现同样的效果
作业:
1.在堆中分配足够的空间,把a.bin文件中的所有内容读到堆中,然后依次显示每个人员信息
day17
calloc函数也可以在堆中分配内存
这个函数会为分配好的内存进行清0
realloc函数可以调整堆中分配内存的大小
realloc的函数不一定在原地完成
调整完成后只需要释放新的内存空间
realloc如果调整失败则返回NULL
二维数组名称不可以赋值给二级指针
二维数组相当于数组指针
结果体中不能声明函数,但可以声明函数指针。
函数指针用来记录代表函数的地址数据
函数指针可以用来之间调用一个函数
把函数声明中的函数名改成指针变量声明就得到函数指针的声明语句
函数声明代表函数的首地址
函数指针可以作为函数的参数使用
这样可以提高函数的灵活性
打印结果:
使用p_func();和使用(*p_func)();的效果一样
qsort函数(在头函数stdlib.h中)可以采用快速排序算法把一个数组中的所有数据按照从小到大的顺序排列好
需要提供一个用来比较两个数字的函数
这个比较函数的两个参数各代表数组中的一个变量的地址
pow函数可以计算幂
sqrt函数可以计算平方根
需要包含头文件math.h
编译时需要交选项–lm
atoi函数可以把字符串中的整数提取出来放在返回值变量中
atof函数可以把字符串中的浮点数提取出来放在double类型的返回值变量中,需要包含stdlib.h头文件
printf/scanf这两个函数可以格式化的从键盘读数据或向屏幕写数据
fprintf/fscanf这两个函数可以格式化的从文件读数据或向文件写数据。
这两个函数的第一个参数都是文件指针;
sprintf/sscanf这两个函数可以格式化的从字符串中读数据或向字符串中写数据。
sprintf第一个参数是一个字符数组,sscanf函数的第一个参数都是一个字符串。
输出缓冲区显示条件
1.遇到\n
2.函数结束时
3.输出缓冲区满了
4.使用fflush(/*输出设备*/)强制显示//fflush(stdout)
sleep函数可以让程序休眠一段实际,要包含头文件unistd.h.
day18
数据结构和算法分成两部分(数据结构,算法)
数据结构研究变量的管理方式
算法研究解决特定问题的方法
逻辑结构指人对数据之间关系的理解和看法
逻辑结构和计算机无关
物理结构描述计算机内部数据之间实际的关系
任何一种数据结构都包含逻辑结构和物理结构这两方面,他们之间的差别可能非常大
逻辑结构
1.集合结构:
这种结构表示数据可以合并成一个整体
2.线性结构:
这种结构中数据之间有一对一的关系
3.树形结构:
这种结构中数据之间有一对多的关系(这个关系称为父子关系)
4.网状结构:
这种结构中数据之间有多对的的交叉映射关系
物理结构
1.顺序结构:
结构中的数据存储在一段连续的内存空间中,典型代表就是数组
随机访问方便,插入删除复杂
2.链式结构:
这种结构中不同的数据被存储在计算机不同的地方,他们的物理位置之间完全没有关系。
链式结构由多个节点构成,每个节点是一个结构体变量。
每个节点中包括有效数据和至少一个指针变量。
链式结构适合进行插入删除操作,不适合进行随机访问
对链式结构进行操作时如果不会修改结构则使用一级指针变量就可以了,如果会修改结构则需要使用二级指针变量。
逻辑结构可以采用多种物理结构实现
他们之间没有明确的一对一的关系
数据结构的基本操作
1.创建/销毁
2.插入/删除
3.获取/修改
4.排序/查找
堆栈
基本特征:
后进先出(类似垃圾箱)
栈顶指针用来记录最后进入数据的位置
队列
基本特征:
先进先出
所有数据有两个端点,一个输入数据另一端输出数据。
作业:
1.使用顺序存储结构实现队列
2.使用顺序存储结构实现循环队列
排序和查找时两种经典的算法
冒泡排序算法是最简单的排序算法
它的的执行效率最低
冒泡排序算法既适用于顺序物理结构也适用于链式物理结构
选择排序可以把数字直接放在最终位置上
选择排序有多种实现方法
选择排序也可以使用链式物理结构
插入排序假设前面的数字都已经排序完成了
每次把后面的一个数字插入到前面已经排序完成的数字序列中合适的位置上。
插入排序也可以用链式物理结构
快速排序每次把一个基准数字放在最后位置上(基准数字前面的数都比它小,基准数字后面的数都比它大)
使用递归的方式实现
归并排序假设所有数据分成两组,每组都是已经排序好的
每次从两组数据中找出各自最小的并选择更小的那个转移到另外一个数组中
堆排序
当所有数据都转移完成后排序结束
把新数组中所有数字按顺序转移回原数组
在进行归并之前先针对两组数组递归调用归并排序函数
查找算法
折半查找算法要求数组本身是排序号的
折半查找算法每次可以排除掉一半的数字
折半查找算法不适合采用链式物理结构
作业:
1.自己实现归并算法