前言
本周主要学习了数据结构,以及了解了IO的一些知识
一、IO简介和标准IO
1、什么是IO,以及IO的分类
IO(input&output)是用户空间和内核空间通过API进行的交互。
IO分为标准IO和文件IO
标准IO:标准c库提供的一系列的用来进行输入输出的函数
fopen/fclose
fgets/fputs
fgetc/fputc
fwrite/fread
fseek
文件IO:Linux系统(内核)提供的一系列的用来进行输入输出的函数
open()
close()
read()
write()
lseek()
2、缓冲区类型
标准I/O提供了三种类型的缓存:刷新缓冲区的时刻不同
全缓存
刷新(fflush):标准I/O的写操作。
当填满I/O缓存,或者满足一定的条件后(程序结束、强制刷新),就会执行刷新操作。
行缓存
当在输入和输出中遇到新行符(‘\n’)时、程序结束、强制刷新、满,进行I/O操作。
当流遇到一个终端时,典型的行缓存。
比如:printf
不带缓存
标准I/O库不对字符进行缓冲,例如stderr。
很多的人机交互界面要求不可全缓存。
标准出错决不会是全缓存的。
使用setbuf()和setvbuf()可以更改缓存的类型
在任何时刻,可以使用fflush强制刷新一个数据流
3、相关函数
FILE *fopen (const char *path, const char *mode);
说明:const char *:字符串/字符数组 只读
功能:根据文件路径和打开方式打开文件(打开流)
参数:path:文件路径(相对路径/绝对路径,如果直接写文件名就指的是当前目录)
Mode:打开方式
4、文件IO
Linux系统(内核)提供的一系列的用来进行输入输出的函数
5、标准IO与文件IO的区别:
- 标准IO是标准c库提供的,文件IO是内核提供的
- 标准IO有缓冲区,可以减少系统调用次数,文件IO就是系统调用,没有缓冲区
- 标准IO通过FILE*操作文件,文件IO通过文件描述符操作文件
- 标准可以跨系统,可移植性好,文件IO只能在linux/unix上使用
- 标准IO只能访问普通文件,文件IO不仅可以访问普通文件,还可以访问比如管道、套接字、设备等这些特殊文件
二、数据结构
1、什么是数据结构
数据结构:数据(由数据元素组成(一种基本数据类型或者结构体))+结构(逻辑结构+存储结构)+操作(增删改查)
数据:能够输入到计算机中的描述客观事物的信息集合 (需要计算机处理的对象);
结构:数据之间的关系;
算法:对特定问题求解的一种描述;
2、顺序表
存储结构:顺序存储,C语言中通过数组实现,在内存中以连续的空间进行存储。
逻辑结构:线性结构(一对一),除首元素和尾元素外,有唯一前趋和唯一后继(与数组的区别)。
算法:增删改查、排序、去重,遍历
3.单链表
4、栈(stack)
栈是一种先进后出的数据结构
5、队列
6、树 和二叉树
操作:
- 创建树
- 销毁树
- 遍历树(前序遍历、中序遍历、后序遍历、层次遍历)
由于二叉树的递归性质,遍历算法也是递归的。三种基本的遍历算法如下 :
先访问树根,再访问左子树,最后访问右子树;
先访问左子树,再访问树根,最后访问右子树;
先访问左子树,再访问右子树,最后访问树根;
7、算法(排序)
四种排序:冒泡排序、选择排序、快速排序、插入排序
总结
这周学的内容很多,代码量也很大,暴露了很多问题,听都能听懂,但自己真正考试上手写,各位错误,各种小细节、大的逻辑的问题很多,具体分析,当考虑到函数的健壮性的时候,容易落掉东西,或者会考虑的太多;再就是对老师教的写程序前,先画逻辑图帮助理解思路的方法,用的不熟练,也容易出问题。