Sections

在学习排序算法的过程中,我们接触到了快速排序。 而快速排序的核心思想就是分治法。 分治法概述 设计思想 对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。 分治法能解决的问题的主要特征: 该问题的规模缩小到一定的程度就可以容易地解决。 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 利用该问题分解出的子问题的解可以合并为该问题的解。 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 基本步骤 分治法通...

图 图的结构定义 图是由一个顶点集V和一个边集S组成的数据结构。 其中,V是顶点的集合,S是边的集合。 图的边有两种: 有向边:有向边是指从一个顶点指向另一个顶点的边。 有向图:有向图是指图中的边都是有向边的图。 无向边:无向边是指两个顶点之间没有方向的边。 无向图:无向图是指图中的边都是无向边的图。 Graph = (V, S) 而 R={VR} 度:和顶点v相关联的边的数目。 对于有向图来说,由于弧是有方向的,所以有入度和出度的概念: 入度:以顶点v为终点的边的数目。 出度:以顶点v为起点的边的数目。 路径 在图论中,路径是指连接图中两个或多个顶点的一系列边的序列。 更正式地说,从顶点 u 到顶点 v 的路径是一个顶点序列:...

C语言文件有两种储存类型 文本文件 储存量大 读写慢 便于对字符操作 存储格式:ASCII 二进制文件 储存小 速度快 便于存储中间结果 存储格式:二进制 文件系统 C语言中使用的磁盘文件系统有两大类 缓冲文件系统 特点是系统自动将文件的一部分内容读入内存,再由内存对文件进行操作。 非缓冲文件系统 特点是系统直接对文件进行操作。 文件的使用 在使用文件前,必须包含头文件<stdio.h> ANSI C为正在使用的每个文件分配了一个文件系统,该文件系统包含文件的有关信息。 类型为FILE的变量称为文件指针变量。 文件结构体如下: typedef struct{ short level;//缓冲区的当前级别 unsigned...

结构体 为什么要使用结构体? 变量:内置数据类型,但是相对独立,缺乏联系 数组:可以存储多个变量,但是变量类型必须一致 想要存储类型不同但是互相之间关联的数据 结构体的声明 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--;...