华清远见嵌入式培训 IO与数据结构的学习与总结

本文介绍了数据结构的基本概念,包括顺序表、单链表、栈、队列和树(特别是二叉树)的逻辑结构、存储结构和操作。同时详细讲解了标准IO和文件IO的区别,以及它们在C语言中的应用,包括缓冲区类型和相关函数。还提及了几种基本的排序算法如冒泡排序、选择排序等。
摘要由CSDN通过智能技术生成


前言

本周主要学习了数据结构,以及了解了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的区别:

  1. 标准IO是标准c库提供的,文件IO是内核提供的
  2. 标准IO有缓冲区,可以减少系统调用次数,文件IO就是系统调用,没有缓冲区
  3. 标准IO通过FILE*操作文件,文件IO通过文件描述符操作文件
  4. 标准可以跨系统,可移植性好,文件IO只能在linux/unix上使用
  5. 标准IO只能访问普通文件,文件IO不仅可以访问普通文件,还可以访问比如管道、套接字、设备等这些特殊文件

二、数据结构

1、什么是数据结构

数据结构:数据(由数据元素组成(一种基本数据类型或者结构体))+结构(逻辑结构+存储结构)+操作(增删改查)

数据:能够输入到计算机中的描述客观事物的信息集合 (需要计算机处理的对象);

        结构:数据之间的关系;

        算法:对特定问题求解的一种描述;

2、顺序表

      存储结构:顺序存储,C语言中通过数组实现,在内存中以连续的空间进行存储。

        逻辑结构:线性结构(一对一),除首元素和尾元素外,有唯一前趋和唯一后继(与数组的区别)。

        算法:增删改查、排序、去重,遍历

3.单链表

4、栈(stack)

栈是一种先进后出的数据结构

 5、队列

6、树 和二叉树

操作:

  1. 创建树
  2. 销毁树
  3. 遍历树(前序遍历、中序遍历、后序遍历、层次遍历)

由于二叉树的递归性质,遍历算法也是递归的。三种基本的遍历算法如下 :

先访问树根,再访问左子树,最后访问右子树;

先访问左子树,再访问树根,最后访问右子树;

先访问左子树,再访问右子树,最后访问树根;

7、算法(排序)

 四种排序:冒泡排序、选择排序、快速排序、插入排序

总结

    这周学的内容很多,代码量也很大,暴露了很多问题,听都能听懂,但自己真正考试上手写,各位错误,各种小细节、大的逻辑的问题很多,具体分析,当考虑到函数的健壮性的时候,容易落掉东西,或者会考虑的太多;再就是对老师教的写程序前,先画逻辑图帮助理解思路的方法,用的不熟练,也容易出问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值