IO与数据结构

一.IO

1.什么时IO

        input,output 输入输出

2.标准IO和文件IO区别

        标准IO:

                (1).标准IO是有库函数系统提供的,由ANSI C标准定义

                (2).是带缓冲区的,运行速率较高

                (3).可以跨平台

                (4).标准I0超重的依据一般为流指针

        文件IO:

                (1).文件IO是由操作系统提供的,由POSIX(可移植操作系统接口)定义

                (2).没有缓冲区,运行效率没有标准IO高

                (3).不支持跨平台

                (4).文件IO操作依据文件描述符(非负整数)

3.系统调用和库函数

        系统调用:操作系统提供给用户的一组硬件接口

        库函数:对系统调用二次封装 

4.系统调用与库函数区别

        (1).系统调用一般提供基础的功能,库函数提供较复杂的功能

        (2).系统调用一般不能重写,库函数可以重写

        (3).系统调用运行时间为机械时间,库函数为用户时间

        (4). 系统调用运行空间为内核空间,库函数为用户空间

        (5).系统调用的返回值一般为非负整数,库函数 返回值不一定

        (6).系统调用运效率没有库函数的高

        (3).系统调用的移植性没库函数的好

5.文件描述符

        是一个非负整数

        本质是个数组下标

6.打开文件

                fopen

        以字符读写:

                fputc 和 fgetc

        以 行 读 写 :

                f g e t s 和 f p u t s

        以 对 象 读 写 :

                f r e a d 和 f w r i t e

        以格式化读写:

                f s c a n f 和 f p r i n t f

                fclose: fflsh:强制刷新由参数

                feof:

        判断文件是否到末尾:

函数功能:打开由参数1描述的文件,打开的方式由参数2确定
函数参数1:需要被打开的文件的路径
函数参数2:打开的方式

 r : 以只读的形式打开文件,文件存在则打开,不存在则报错

 r+ : 以读、写的形式打开文件,文件存在则打开,不存在则报错

 w : 以只写的形式打开文件,文件存在则清空打开,文件不存在则新建

 w+ : 以读、写的形式打开文件,文件存在则清空打开,文件不存在则新建

 a : 以追加的形式打开文件,文件存在则追加,文件不存在则新建

 a+ : 以可读可写(追加)的形式打开文件,文件存在则追加,文件不存在则新建
函数返回值:成功返回:文件流指针

 失败返回NULL,并且更新errno

6.静态库与动态库

 

 二.数据结构

1.结构是什么

        数据:现实生活中一切可以处理的信息

        结构:逻辑结构、存储结构

        研究的是数据的逻辑结构,存储结构及其操作。

        逻辑结构:事物与事物之间在现实生活中的抽象的一种逻辑关系

顺序存储:在逻辑上相邻的元素,在物理空间上也相邻

 优点:查找方便,

 存储空间的利用率可以达到1
 缺点:插入和删除不方便,

 申请空间的时候,必须是一片连续的空间,对空间的要求比较高

 会用空间碎片的产生
链式存储:在逻辑上相邻的元素,在物理空间上不一定相邻

 优点:插入元素不需要移动大量的空间

 对空间的要求没那么大,

 缺点:查找不方便

 存储空间的利用率不足1,没有顺序存储的大
索引存储:依据索引表查找数据大概位置,详细查找数据本身(冲突没有解决号的哈希存储)

 优点:查找方便

 缺点:有索引表的存在,要浪费空间

 插入元素,删除元素之后,索引表要更新
哈希存储:根据关键字直接就能定位到记录本身,就能拿到数据

 优点:查找方便,插入,删除也方便

 缺点:如果哈希函数设计的不合理,查找的效率就会很低
线性表,链表,顺序表之间的区别?
线性表是一种逻辑结构
顺序表和链表是线性表在顺序存储下和链式存储下的体现
链表和顺序表的区别:

1.链表是链式存储,顺序表是顺序存储

2.顺序表会有空间碎片产生,链表没有空间碎片产生

3.链表一般多用于插入、删除较多的场景

 顺序表一般用于查找较多的场景

4.顺序表的存储空间利用率比链表的大
链表和顺序表怎么选择?

1.从空间来说

 顺序表对空间的要求比链表大

 顺序表的利用率比链表大

2.从操作来说

 多用于查找,用顺序表

 多用于插入、删除,用链表

3.从编译环境来说

 不支持指针类型操作的编译器不能使用链表

2.受限的线性表:

栈:受限在了操作上
队列:受限在了操作上
串:受限在了存储上

栈: 

顺序存储: 

同顺序表:

栈的定义: 

只允许数据在一段进行插入和删除操作,允许操作的一段叫做栈顶
特点:先进后出(FILO)
只允许在一段执行插入操作,另一端执行删除操作,允许插入的一段叫做队尾,允许删除操作的一段叫做队头
特点:先进先出(FIFO)
只允许存储字符   *   '   a   —   1  

3.数的节点遍历

        先 序 遍 历 :

        中 序 遍 历 :

        后 序 遍 历 :

        深 度 优 先 :

        广 度 优 先 :

        层 次 遍 历 :

                队 列

4.算法

        算 法 是 有 限 指 令 的 有 序 集 合 。 算 法 是 有 穷 的 , 程 序 是 无 穷 的 程 序 = 算 法 + 数 据 结 构

5.算 法 的 特 征 :

        有 穷 性:算 法 必 须 在 有 限 个 语 句 能 描 述 完 确 定 性 ( 无 二 义 性 ):每 一 条 语 句 只 能 有 一 个 解 释 可 行 性:能 运 行 的 输 入: 输出:

6.构建哈希函数

        直接地址法:

        平方取中法

        叠加法:

        质数除余法:

7.冲突

冲突: 

 什么是冲突:冲突是指:表中某地址j∈[0,m-1]中己存放有记录,而另一个记录的H(key)值也为j。

怎么解决冲突: 

开放地址法:

不太好,因为会将哈希表退化成线性表,还只能使用顺序查找。

再次哈希法:

也不好,因为麻烦

链地址法:

8.常 见 的 排 序 算 法 :

        内 部 排 序

                直接 插 入 : 重 新 构 建 一 个 链 表

                折 半 插 入 : 和 二 分 查 找 类 似

                希 尔 排 序 : 增 量 , 逐 渐 减 少 的 , 直 到 增 量 为 1 为 止

                冒泡:每一次运行总会将最小的或者最大的放到前面,如果需要交换,一直在交换

                快速排序*

                多路归并:

                基数排序

        外部排序:

                基于多路归并的外部排序:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值