摘要:
深度优先搜索 Depth First Search DFS 深度优先是比较基础的一种方法,还有一种是它的兄弟广度优先 深度优先顾名思义:先深入搜索到一种情况的"底部"(原谅我用了这么抽象的词),然后再返回搜索其它情况 例题 我们依旧举例说明,比如我们现在想要在A,B,C三个箱子中放入1,2,3三张牌 阅读全文
摘要:
枚举 枚举,暴力的一种算法,典型利用"计算机算力大大高于人力"这件事的做法 枚举,顾名思义:有序的尝试每一种可能 在书里,枚举被单独列为一章,不过每一节都是各种花式实战 因此只用了一个MD笔记来记录它 鬼畜奥数题 我们现在有一道奥数题,要求使用1-9九个数字填入下方的等式: [][][]+[][][ 阅读全文
摘要:
链表(数组模拟) 链表也可以使用数组来实现,操作和基础知识比指针简单 但是个人觉得就思路和操作的清晰,以及对链表的理解而言,还是用指针好 模拟链表介绍 我们可以利用两个数组,分别记录链表要的两个东西:数据和地址 我们使用一个数组data,来存储每个结点的数据 使用另外一个数组right,来存储序列中 阅读全文
摘要:
链表(指针) 在存储一大波数的时候,如果使用数组,有时会感到数组显得不太灵活 我们可以在C语言中使用指针和动态分配函数malloc来实现链表 关于指针,这里就不赘述了,默认已经了解相关知识 指针实现 malloc malloc 函数的作用就是从内存中申请分配指定字节大小的内存空间 malloc(4) 阅读全文
摘要:
栈 栈是一种后进先出的数据结构,它就是栈 栈限定了它只能在一端进行插入和删除的操作,这决定了它“后进先出”的性质 栈的实现也比较简单:利用一个一维数组和一个指向栈顶部的变量(称它为top)即可,我们前面所讲的“插入”和“删除”的操作,就是通过这个"top"来实现的 入栈 入栈的操作很简易 top++ 阅读全文
摘要:
队列 队列是一种特殊的线性结构,它只允许在队列的首部head进行删除,以及在尾部tail进行插入 这两种操作分别被称为“出队”和“入队”。而当队列中没有元素即head=tail时,称其为“空队列” 我们现在可以将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型 struct queue{ 阅读全文
摘要:
#快速排序 快速排序的核心是基准数,基准数理论上是可以随机的一个数,这里我们每次都选择第一个/最左边的数作为基准数 我们可以认为,快速排序的过程,就是不断选择基准数排序的过程。我们大致可以这么描述它的步骤: 【比如我们排序 6 1 2 7 9 3 4 5 10 8 】 1.选择一个数作为基准数,我们 阅读全文
摘要:
冒泡排序 核心思想在于“每次比较两个相邻的元素,如果它们顺序错误就把它们交换过来”,那什么是所谓顺序错误呢? 比如,我们想要进行从大到小的排序,则把小的数字往后靠 比如有五个数字12 35 99 18 76 ,我们试图将它们从大到小排序 1.我们首先比较第一12和第二35,显然35大。依据核心思想, 阅读全文
摘要:
#桶排序(简版) 这是一种对于n个数据排序的方式 这个算法是假设了有n个桶,编号便是0-*(n-1),共n个桶来装数据 每当出现了一个数,我们就在对应编号的桶中放置一个标志 查看数据时只要看每个桶中有多少数据即可 //比如我们对0-10的数进行排序 int a[11] ; int i,j,t ; f 阅读全文