IO数据结构总结

        转眼间IO和数据结构也迎来了尾声,体量真的蛮大的,也是有难度的,以下是我对其的部分总结。

IO(学会使用man手册)

一、IO的分类

标准IO,文件IO

二、文件的分类

1、按存储类型来分:

文本文件:存储的是ASCII码(0~127),以EOF End Of File (-1)作为结束符。 一般存储数据量比较大的信息,读取的速度慢
二进制文件:是数据在内存上的原样存储,存储的是二进制的形式。 一般存储中间变量,数据量比较小的信息,读取的速度快

2、按操作方式来分:

带缓冲区的操作:(标准IO)高级的文件操作,系统会自动的在内存上给我们分配缓冲区。
不带缓冲区的操作:(文件IO)低级的文件操作,系统是不会自动的给我们的程序分配空间,但是如果需要 缓冲区的机制,缓冲区就得自己定义了。

三·、标准IO和文件IO

1、区别

2、标准IO

(1)、缓冲区的方式

全缓冲: 缓冲区满了才刷新缓冲区,或者强制刷新缓冲区

行缓冲: 碰到换行符刷新缓冲区、缓冲区满了刷新、或者强制刷新缓冲区

不缓冲: 所有的信息到缓冲区之后直接到文件

(2)、对文件进行操作

打开文件: fopen

以字符读写: fputc 和 fgetc

以行读写: fgets 和 fputs

以对象读写: fread 和 fwrite

以格式化读写: fscanf 和 fprintf

关闭文件: fclose

光标移动: fseek()

获取光标位置: ftell()

3、文件IO

打开文件:open

操作文件:read  writr

关闭文件:close

4、对目录文件的操作

打开目录: opendir

读目录: readdir

关闭目录:closedir

四、动态库、静态库

1、什么是库?

是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二 者库的二进制是不兼容的。

2、动态库和静态库

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库,因此体积较大。

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动 态库存在,因此代码体积较小。

3、静态库

制作静态库

4、动态库

制作动态库

数据结构

一、线性结构

1、线性结构的顺序存储

2、线性结构的链式存储

3、带头结点的不循环单链表

4、双链表

5、受限的线性表

栈:受限在了操作上

队列:受限在了操作上

串:受限在了存储上

6、栈

什么时候考虑用栈?

入的顺序和出的顺序发生变化

栈的应用

7、队列

二、树形结构

什么是树?

树的相关概念

1、二叉树

(1)、二叉树的定义 

二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个 根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。二叉树与普通有序树不同,二叉树严格区分 左孩子和右孩子,即使只有一个子节点也要区分左右。

(2)、二叉树的性质

满二叉树:有k层,恰好有2 k -1个结点

完全二叉树:在满二叉树的基础上,从右往左,从下往上依次去除结点

2、树形结构的顺序存储

平均状况下顺序存储的空间利用率较低,所以不使用顺序存储,使用链式存储来存数据。

3、树形结构的链式存储

4、平衡二叉树

每一个结点的左子树的层数和右子树的层数不超过2

目的:解决树的降维问题(把树将成链表),提高效率

5、赫夫曼树(哈夫曼树、最优二叉树)

6、线索二叉树

三、网状结构

分类:

按有无方向可以分为:有向图、无向图

按是否带权值:带权图和不带权图

1、网状结构的顺序存储

2、网状结构的链式存储

3、对于图的知识点

最短路径算法-迪杰斯特拉(Dijkstra)算法 弗洛伊德(Floyd)算法求图的最短路径

四、算法

算法是有限指令的有序集合。

算法是有穷的,程序是无穷的

程序 = 算法 + 数据结构

1、算法的特征

有穷性:算法必须在有限个语句能描述完

确定性(无二义性):每一条语句只能有一个解释

可行性:能运行的

输入:

输出:

2、怎么样评判算法的好坏

效率与低存储量需求(时间复杂度,空间复杂度):

        时间复杂度:执行这个算法需要花费多少时间。

        空间复杂度:执行这个代码,需要花费多少空间。

正确性:算法得无误运行。

可读性、可维护性:对人的友好,是从编程规范入手优化。

健壮性、鲁棒性:算法在输入有误的信息的时候,代码还能够按照预想的方式执行,不出现BUG,不会退出。

3、常见的查找算法

(1)、线性结构

(2)、树状结构

(3)、构建哈希函数
直接地址法

平方取中法

叠加法

质数除余法

(4)、冲突
什么是冲突:

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

怎么解决冲突:

        链地址法

4、常见的排序算法

(1)、内部排序
插入:

交换:

选择:

排序:

        多路归并

        基数排序

        外部排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值