C语言文件有两种储存类型 文本文件 储存量大 读写慢 便于对字符操作 存储格式:ASCII 二进制文件 储存小 速度快 便于存储中间结果 存储格式:二进制 文件系统 C语言中使用的磁盘文件系统有两大类 缓冲文件系统 特点是系统自动将文件的一部分内容读入内存,再由内存对文件进行操作。 非缓冲文件系统 特点是系统直接对文件进行操作。 文件的使用 在使用文件前,必须包含头文件<stdio.h> ANSI C为正在使用的每个文件分配了一个文件系统,该文件系统包含文件的有关信息。 类型为FILE的变量称为文件指针变量。 文件结构体如下: typedef struct{ short level;//缓冲区的当前级别 unsigned...
Sections
结构体 为什么要使用结构体? 变量:内置数据类型,但是相对独立,缺乏联系 数组:可以存储多个变量,但是变量类型必须一致 想要存储类型不同但是互相之间关联的数据 结构体的声明 struct student{ char name[20]; char sex; int age; char job[40]; char address[40]; }; 结构体声明的一般形式: struct 结构体名{ 数据类型 成员变量名1; ... }; 结构体变量声明的一般形式: struct 结构体名 变量名; 也可以结合结构体声明和变量声明: struct student{ char name[20]; char sex; ... }stu1,...
树是一种数据结构。 树的概念 树的定义 树是n个结点的有限集合(记为T)。 形式化定义(二元组) 树:$T=(D,R)$。 $D$ 是包含n个结点的有限集合 $n>0$ 。 当n=0时,称该树为空树。 当n>0时,这n个结点中存在一个唯一结点作为树的根结点,其余结点可分为m个互不相交的有限集 $T_1,T_2,…,T_m$ ,其中每个集合本身又是一棵树,称为根的子树。 $R$ 是D上的一个关系,$R\subset D\times D$ 。 树的表示 逻辑表示法 即我们平时常见的树形图 文氏图表示法 凹入表示法 括号表示法 例如: A(B(D,E),C(F,G)) 树的基本术语 结点的度和树的度 树中一个结点的子树的个数称为该结点的...
串,及字符串,是由零个或多个字符组成的有限序列。一般记为: $$ S = ‘a_1a_2a_3…a_n’ (n>0)$$ 串是一种特殊的线性表,数据元素之间呈线性关系。 串的数据对象是字符的有限序列。 串的基本操作 StrAssign(&T, chars) 赋值操作,把串T赋值为chars StrCopy(&T, S) 复制操作,把串S复制给串T StrEmpty(S) 判空操作,若S为空串,则返回true,否则返回false StrLength(S) 求串长,返回串S的元素个数 ClearString(&S) 清空操作,将S清空 DestroyString(&S) 销毁串,将串S销毁 Concat(&T, S1, S2) 串联接,...
定义 与栈不同,队列的两端都允许插入和删除操作。 队列(Queue) 是只允许一端进行插入操作,而另一端进行删除操作的线性表。 相关术语 队头:允许删除的一端 队尾:允许插入的一端 空队列:无元素 特点:先进先出 基本操作 InitQueue(&Q) 初始化队列, 构造一个空队列Q DestroyQueue(&Q) 销毁队列, 释放Q占用的内存空间 EnQueue(&Q, x) 入队, 若队列Q未满, 则将x加入, 使之成为新的队尾 DeQueue(&Q, &x) 出队, 若队列Q非空, 则删除Q的队头元素, 并用x返回 GetHead(Q, &x) 读队头元素, 若队列Q非空, 则将队头元素赋值给x QueueEmpty(Q) ...
2024.11.23 这里是大一的我。 自己目前还不是很能理解栈和队列的相关知识,只是简单的做一下竞赛课程的笔记。 不是很了解,所以我就先把我目前学到的东西记录下来,以后再慢慢补充。 我们在以后的数据结构再见吧! 由于老师上课的速度很快,所以难免笔记会有疏漏,并且代码大部分由Marscode生成。 如果你发现有什么问题或者有什么建议,欢迎在评论区留言。 Btw,如果你觉的这篇文章对你有帮助,不妨点个赞吧⬇️ 👍 栈(stack) 定义 线性表是具有相同数据结构的n个元素的有限序列 栈是只允许一段进行插入或删除操作的线性表 相关术语 栈顶:允许插入和删除的一段 栈底:不允许操作的一段 空栈:无元素 特点:先进后出 基本操作 线性表 初...
C语言能处理一类非常特殊的数据——内存地址(常量) 如果这篇文章有帮到你的话,不妨点个赞吧 👍 引入 计算机内部有很多储存单元,每个储存单位都用唯一的地址编号(表示为一个整数加以区别),简称为地址 或者说 内存中每个字节都有一个编号——地址 指针使程序的不同部分能共享数据(地址唯一性) 指针 指针自身的是一个变量,内容为地址变量。指针自身被称为指针变量(也作指针)。 指针变量指向目标变量。 char *p,x; x = "A"; p = &x; *为取目标运算 &为取地址运算 空指针 int *p = 0; int p = null; 定义了一个空指针 指向的目标变量为null 作用 任何变量一旦定义就有值 在不知道指针的指向时,...
插入排序 Insertion Sort 从新元素开始,从后向前扫描直到扫描到的元素小于等于新元素 则将新元素插入扫描到的元素前 代码实现 #include <stdio.h> #include <stdlib.h> int main(void) { int arr[8] = {5,6,1,7,5,3,1,4}; for (int i = 1; i < 8;i++) {//从第二位开始遍历数组 int j = i -1; int cur = arr[i];//储存当前数字 while (j >= 0 && arr[j] >= cur) {//向前遍历 arr[j+1] = arr[j];//将前面的数字向后移动一位 j--;...
时间空间复杂度 如何判断一个算法的好坏? 我们需要一种复杂度计算方式,不受计算机性能和程序数据的影响 时间复杂度 BigO BigO计算表示一个算法的渐进时间复杂度 T(n) = O(f(n)) f(n) 表示代码执行次数之和,O表示正比例关系 复杂度越低代码效率越高 e.g. 1 for (int i = 1; i <= n; i++) { x++; } 首先int i = 1为一次运算 其次,每次循环中会分别执行i <= n、i++、x++三次运算 则n次循环下会执行3n次 总共运算1+3n次,那么这个算法复杂度则为O(n) 因为BigO用于表示计算的增长变化趋势,所以当n无限大时,常数1和系数3可忽略不计 e.g. 2...
数据结构与算法 数据结构是程序储存信息的基本单位,数组就是常见的数据结构。而算法则是实现特定任务的计算步骤,比如排序算法和搜索算法的目的顾名思义就是排序和搜索。 但数据结构和算法不一定像数组和二分查找这个例子这样是完全分开的单独内容。数组是最简单的数据结构,而很多其他复杂的数据结构往往又集成了很多的算法在其中。 所以可以这样理解 程序 = 数据结构 + 算法 数据结构 官方定义 数据结构是计算机存储、组织数据的方式 但是在很多情况中,数据结构不仅包含数据本身,还会包含一些算法 算法 官方定义 算法是一系列规定的计算步骤,为了实现特定的计算目的