IO编程与数据结构学习总结

IO编程

标准IO 

1. 标准 IO 是由库函数系统提供的,由 ANSI C 标准定义
2. 是带缓冲区的操作,运行效率较高
3. 支持跨平台的
4. 标准 IO 操作的依据一般是流指针
全缓冲: 缓冲区满了才刷新缓冲区,或者强制刷新缓冲区
行缓冲: 碰到换行符刷新缓冲区、缓冲区满了刷新、或者强制刷新缓冲区
不缓冲: 所有的信息到缓冲区之后直接到文件
相关函数
fopen
函数功能:打开由参数 1 描述的文件,打开的方式由参数 2 确定
函数参数 1 :需要被打开的文件的路径
函数参数 2 :打开的方式
r : 以只读的形式打开文件,文件存在则打开,不存在则报错
r+ : 以读、写的形式打开文件,文件存在则打开,不存在则报错
w : 以只写的形式打开文件,文件存在则清空打开,文件不存在则新建
w+ : 以读、写的形式打开文件,文件存在则清空打开,文件不存在则新建
a : 以追加的形式打开文件,文件存在则追加,文件不存在则新建
a+ : 以可读可写(追加)的形式打开文件,文件存在则追加,文件不存在则新建
函数返回值:成功返回:文件流指针
失败返回 NULL ,并且更新 errno
fgetc
函数功能:从 stream 指示的文件中读取字符
函数参数:需要读字符的文件流
函数返回值:成功返回读到的字符可以是( EOF ,表示读完了),失败返回 -1
fputc
函数功能:给 stream 写了一个字符 c
函数参数 1 :被写的字符
函数参数 2 :给谁写
函数返回值:成功返回写入的字符,失败返回 -1
fgets
函数功能:按行读
函数参数 1 :读到哪
函数参数 2 :读多少(实际读到的是 size-1 ,最后一个空间给 \0 预留) 所以 fgets 相较于 gets 是安全的
函数参数 3 :从哪读
函数返回值:成功返回非 0 ,返回 NULL 的时候是出错或者没有可读的字符了
fputs
函数功能:给文件写
函数参数 1 :从哪写
函数参数 2 :给谁写
函数返回值:成功返回非负整数,失败返回
fread
函数功能:读
函数参数 1 :读到哪
函数参数 2 :一次读多少
函数参数 3 :总共读多少次数
函数参数 4 :从哪读
函数返回值:成功返回成功读或写的成员的个数,失败返回 0
fwrite
函数功能:写
函数参数 1 :从哪写
函数参数 2 :一次写读多少
函数参数 3 :总共写多少次
函数参数 4 :往哪写
函数返回值:成功返回成功读或写的成员的个数,失败返回 0
fprintf
函数功能:往指定的流里面输出东西
函数参数 1 :指定的流
函数参数 2…… :同 printf
fscanf
函数功能:从指定的流里面获取信息
函数参数 1 :指定的流
函数参数 2…… :同 scanf
fclose
函数功能:关闭由参数 stream 指示的流
函数参数:需要被关闭的流
函数返回值:成功返回 0 ,失败返回 -1 并且设置errno
fflsh
函数功能:强制刷新由参数 1 指定的流
函数参数如果为 NULL ,则会刷新所有已打开的输出流
函数返回值:成功返回 0 ,失败返回 -1 并且更新 errno
feof

判断文件是否到末尾

fseek
函数功能:给指定的流从参数 3 描述的位置移动参数 2 个大小的位置
参数 1 :给谁移动光标
参数 2 :移动多少
参数 3 :从那开始:
SEEK_SET 从文件开头移动
SEEK_CUR 从文件当前光标指向的位置开始移动
SEEK_END 从文件末尾开始移动
返回值:
成功返回 0 ,失败返回 -1 并且更新 errno
ftell
函数功能:计算由参数 stream 指示的流当前光标处在的位置
函数参数:指定的文件流
函数返回值:成功返回当前处在的位置,失败返回 -1 ,并更新 errno
fileno
函数功能:获取文件流指针里面的文件描述符

文件IO

1. 文件 IO 是由操作系统提供的,由 POSIX (可移植操作系统接口)定义
2. 没有缓冲区,运行效率没有标准 IO
3. 不支持跨平台的
4. 文件 IO 操作的依据一般是文件描述符(非负整数)
相关函数
open
函数功能:打开文件
函数参数 1 :需要打开的文件路径
函数参数 2 :打开的方式
必须包含如下的其中一个
O_RDONLY : 只读
O_WRONLY : 只写
O_RDWR : 可读可写
还可以有以下的:
O_APPEND: 以追加的形式打开
O_CREAT : 文件存在则打开,不存在则按照 mode 参数描述的权限创建一个普通文件
函数参数 3 :如果文件存在则打开,不存在则按照此参数描述的创建一个普通文件
函数返回值:成功返回文件描述符(非负的最小整数) file description fd
失败返回 -1 ,并且更新 errno
read
函数功能:从 fd 描述的文件中读取 count 个字节的数据给 buf 开始的空间
函数参数 1 :从哪读
函数参数 2 :读到哪
函数参数 3 :读多少
函数返回值:成功返回实际上读到的数目,失败返回 -1 ,并且更新 errno
write
函数功能:把数据从 buf 指示的空间里面写道 fd 里,写了 count
函数参数 1 :往哪写
函数参数 2 :从哪写
函数参数 3 :写多少
函数返回值:成功返回写入的个数,失败返回 -1 并且更新 errno
close

函数功能:关闭文件
函数参数:需要关闭的文件的文件描述符
函数返回值:成功返回0
,失败返回-1并且更新errno

动态库与静态库

制作动态库
制作静态库

数据结构

线性结构

顺序存储
定义:
typedef struct list
{
    data_type data[SIZE]; //struct student arr[];//存储空间
    int count; //用来指示当前存储多少元素了
}List;
typedef struct list
{
    data_type (*data)[]; //指向数组的指针 数组:顺序表的存储空间
    int size; //当前顺序表有多大的空间
    int count; //用来指示当前存储了多少元素 表满:count == size
}List;
特点:
1. 逻辑上相邻的元素,在物理空间上也相邻 === 》空间连续
2. 大小固定
3. 表满不能存,表空不能取
链式存储
定义

插入 

删除

定义
//定义大小
#define SIZE (10)
栈的定义:
//定义数据类型
typedef int data_type;
//顺序表的定义
typedef struct list
{
    data_type data[SIZE]; //存储空间
    int count; //指示元素的个数
}List;
//栈的定义
typedef struct stack
{
    data_type data[SIZE]; //存储空间
    //只能在栈顶进行操作
    int top; //指示栈顶
}Stack;
入栈和出栈

 

队列
定义
typedef struct queue
{
    data_type data[SIZE]; //存储空间
    //在队尾插入、队头删除
    int tail; //指示队尾
    int head; //指示队头
}Queue;
入队和出队

 

树状结构

 

 

网状结构

分类:
按有无方向可以分为:有向图、无向图
按是否带权值:带权图和不带权图
网状结构的顺序存储

 

网状结构的链式存储
有向图:十字链表法
无向图:多重链表

算法

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值