IO和数据结构

IO

每个程序在运行时默认打开的三种流:

  1. stdio 标准输入流
  2. stdout 标准输出流 
  3. stderror 标准错误流(没有缓冲区) 

IO分为标准IO和文件IO

标准IO和文件IO的区别 :

  1. 标准IO是由标准c库提供的,文件IO是由操作系统提供的,只能在特定的操作系统下使用。相比之下,标准IO的可移植性更好
  2. 标准IO有缓冲区,文件IO没有缓冲区,标准IO可以减少系统调用的次数,文件IO就是系统调用
  3. 标准IO是通过文件流指针FILE *操作文件,文件IO是通过文件描述符操作文件
  4. 标准IO只能访问普通文件,文件IO不限制
标准IO: 

 

 fgets和gets的区别:

fgets只能读入传入的size-1个参数,如果传入的字符数量少于size-1个,那么\n也会被读入。gets不会读入\n,也不会进行越界检查,这是很危险的。

fputs和puts的区别:

fputs只会原样输出,puts默认加上换行

  文件IO:

 open函数的返回值是文件描述符,一种非负最小的整数,默认前三个都被系统占用了

三种缓冲区类型

  1. 全缓存;当缓存区满的时候或者程序结束,或者强制刷新(fflush)的时候,就会刷新(读入内存或写入文件)
  2. 行缓存:当遇到'\n'或者缓冲区满,强制刷新,程序结束时。才会刷新
  3. 不带缓存;有些库函数不带缓存

对目录的操作

 静态库和动态库的区别

  1. 载入时刻不同:静态库是编译时载入的;动态库是在运行时才载入
  2. 动态库升级后便可直接使用,静态库升级后需要重新编译才能运行
  3. 静态库的可移植性更好
  4. 链接静态库生成的可执行文件更大
  5. 多个程序都需要用到同一个静态库的重复代码很多,动态库可以实现多个程序共享一个库

stat获取文件属性 

 

 

 

 

 数据结构

数据结构的三要素逻辑结构,存储结构和数据运算

存储结构

  • 顺序存储:在逻辑上相邻的元素,在物理空间上也相邻。
  1. 优点:查找方便,存储空间的利用率可以达到1
  2. 缺点:插入和删除不方便,申请空间的时候,必须是一块连续的空间,对空间的要求比较大,会有空间碎片的产生
  • 链式存储:在逻辑上相邻的元素,在物理空间上不一定相邻
  1. 优点:插入和删除元素方便,对空间的要求不那么大
  2. 缺点:查找不方便。空间利用率不足1,没有顺序存储的大
  • 索引存储:依照索引表查找数据大概的位置,详细查找数据本身(冲突没有解决的哈希存储)
  1. 优点:查找方便
  2. 缺点:有索引表的存在,要浪费空间。插入和删除元素后,索引表也要更新
  • 哈希存储:根据关键字直接就能定位到记录本身,就能拿到数据
  1. 优点:查找方便,插入和删除也方便
  2. 缺点:如果哈希表设计不合理,查找的效率就会很低

线性表和顺序表和链表的区别?

线性表逻辑结构顺序表和链表是线性表在顺序存储和链式存储下的体现。

顺序表(存储结构为顺序存储)和链表(存储结构为链式存储)

顺序表:静态分配空间,地址连续,按照下标查找元素最快,时间复杂度为O(1)

链表:动态分配空间,地址不连续,插入和删除元素最快,时间复杂度为O(n)

顺序表和链表的区别:

  1. 顺序表是顺序存储的,链表是链式存储的
  2. 顺序表会有空间碎片产生,链表没有存储碎片产生
  3. 链表一般用于插入和删除较多的场景,顺序表一般用于按下标查找较多的场景
  4. 顺序表存储空间利用率链表

顺序表和链表该如何选择?

  1. 从空间来说:顺序表对空间的要求比链表的大。顺序表的利用率比链表好
  2. 从使用情景来说:顺序表适合查找较多的情景,链表适合插入和删除较多的场景
  3. 从编译器来说:不支持指针操作的编译器不能用链表

编译器不支持指针类型操作,但又是插入和删除较多的场景:使用静态链表,本质上是二维数组 

栈 :一种操作受限的线性表

特点:先进后出,只能在栈顶进行操作

顺序栈

结构体的定义:

 操作:

链栈:

结构体的定义:

 

 操作:

 队列

特点:先进先出,头部出队,尾部入队

顺序队列

结构体的定义:

 操作:

 

链队列

结构体定义:

 操作:

 树

 

结构体的定义:

 操作:

 常见的排序算法

选择排序

 

 冒泡排序:从左到右依次比较相邻元素,如果大的就交换,每排序一次就少排序一次

 插入排序:从无序队列里插入到有序队列里的合适的位置,有序元素依次往后挪,腾位置

 快速排序:确定基准,左右指针,尾指针指向的值比基准小就赋值给头指针的值,头指针指向的值比基准大就赋值给尾指针指向的,最后首尾指针相等的地方就是基准该放的地方

 

 

 这是在华清远见学习数据结构的总结,个人比较懒,所以稍稍偷工减料了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万小橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值