数据结构和算法
文章平均质量分 77
数据结构和算法
KKK3号
欢迎来到我的博客,这是命运石之门的选择吧φ(゜▽゜*)♪
展开
-
17-BFS(广度优先搜索算法)
BFS广度优先搜索算法,是最简便的图搜索算法,常用于解决权重相同且不变的图的最短路求解问题。原创 2023-04-02 19:01:29 · 475 阅读 · 0 评论 -
16-DFS(深度优先搜索算法)
DFS(深度优先算法)是常见的搜索算法,早期常用于需要搜索的地方,并且还拓展出很多其它算法。原创 2023-04-02 08:59:49 · 393 阅读 · 0 评论 -
15-哈希表
哈希表(Hash table),也称散列表,是一个能够将数值映射而成地址从而进行直接访问的数据结构,通过哈希表我们可以快速、迅捷地访问数据。原创 2023-03-28 15:34:19 · 1082 阅读 · 0 评论 -
14-堆排序
堆(Heap)是一种常见的数据结构,常用于存储数据,其本质上是一棵完全二叉树。下面我们来看看如何用数组实现堆结构及其相关功能。原创 2023-03-21 00:05:26 · 135 阅读 · 0 评论 -
13-并查集
数据结构并查集常用于将两个集合并起来以及查询两个元素是否隶属于同一个集合。相对于传统我们的求法,并查集算法极大减少了查询的工作量,提高了效率。原创 2023-03-12 08:13:02 · 302 阅读 · 0 评论 -
12-Trie树
Trie树(又称字典树、单词查找树)是一种树型的数据结构,常用于保存和查找字符串,是一种十分高效率的存储和检索方式。原创 2023-03-04 23:01:08 · 291 阅读 · 0 评论 -
11-KMP算法
KMP算法是一个字符串匹配算法,总的意义是在给定的字符串A中利用优化的方法快速地找出字符串B的位置,相比于传统匹配算法,它能有效减少匹配时间,提高效率。原创 2023-02-26 21:55:44 · 281 阅读 · 0 评论 -
9-静态链表及其有关操作
链表可以用malloc/new和结构体加指针的方式来实现,那种实现方式实现的链表又被称为动态链表。但是我们还可以利用数组的方式来实现一个链表,这种实现方式称为静态链表。原创 2023-02-19 08:25:07 · 479 阅读 · 0 评论 -
8-高精度计算(加法)
我们知道,在C语言和C++中对于所能存储的数值的最大值是有明确的上限的。但是我们有时候会需要去计算一些数值比较大的数字:例如位数为1000、10000的数字的加减运算,这时候我们就需要使用新的运算方法了。原创 2022-10-31 13:59:30 · 492 阅读 · 0 评论 -
7-二分查找
这几天学习了一个新的算法—二分查找。进入主题,首先来看个问题:对于下面这串有序的数组,我们怎么快速找到自己想要的数字的位置呢?当然,最简单直接的方法是设计一个循环,一个一个地去将里面地数据区取出来,再与目标值进行比对,直到找到我们需要的数字。但这种方法有一个很大的问题:就是当数组很大的时候,我们要找的数字在数组的最后面,那么我们将会经历很多次循环才能找到我们的目标,这会造成工作效率的低下。所以,为了提高效率,引入一种新的查找算法—二分查找。首先我们还是先来看看二分的思路:首先我们拿到一个有序的数表原创 2022-04-26 23:19:25 · 563 阅读 · 0 评论 -
6-归并排序
今天学了一种新的排序方法:归并排序,首先我们来看一个问题:如何将下面的数组从小到大排序好:5,1,3,0,5,4,9,8,7,0除了上次的快速排序外,这里我们采用一个新的方法,归并排序。首先我们先来看看它的思路:首先根据每次递归得到的数组由两个相邻的排列好的序列组成,其中有个指针指向数组中间。分别有两个指针指向两个序列,第一个指针指向第一个序列第一个元素,第二个指针指向第二个序列第一个元素。将第一个指针指向的数和第二个指针指向的数对比,哪个小就赋予给一个临时存放数据的数组tmp[10],被拿走数原创 2022-04-22 21:23:03 · 195 阅读 · 0 评论 -
5-快速排序
假设有下面这样一排数据需要排序:3 7 6 1 2 9 1 2 6排开常用的冒泡和选择排序,今天我们来试一下一种新的方法:快速排序快速排序的思路如下:首先我们要先从这组数据中选出一个任意值X,然后以X为分界,比X小的数据排到X的左半边,比X大的数据排到X的右半边。然后我们会得到两边数据,并且左边的比X小或等于X,右边的比X大或等于X,然后我们再将这两组数据进行与上面相同的操作,直至分到只有一个数据。因为都是相同的思路,这里我们可以采用递归操作,直至分为单个数据(此时是递归最开始的原创 2022-04-21 22:34:31 · 207 阅读 · 0 评论 -
4-单链表及其有关操作
链表及其有关操作链表的定义:首先先让我们来看看什么是链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。由上面我们不难发现,链表就是一系列零散的点,通过指针作为引线,在内存中串起来的一组数据。还有一个值得我们注意的是,链表是非顺序的存储结构,与我们的数组不同,虽然两者都是一组数据,但是数组在内存中是连续存储的。然后还有一个值得注意的点是,链表中的元素是动态生成的,.原创 2022-04-20 09:24:46 · 2240 阅读 · 0 评论 -
3-排序算法
冒泡排序冒泡排序的思路是将每两个数据之间进行大小比对,将大的数据后移,反复比对移动数据,直至数组排列整齐#include<stdio.h>int main(){ int arr[10] = {5,1,8,9,7,4,2,3,0,6}; int flag = 0; for (int i = 0; i < 10; i++) { flag = 0; for (int j = 0; j<10-i-1; j++) { if (arr[j] > arr原创 2022-04-15 21:34:36 · 372 阅读 · 0 评论 -
2-蛇形矩阵
蛇形矩阵首先我们来看问题:上面这个矩阵我们要怎么将它输出呢?我们仔细观察这个矩阵,不难发现它是有一定规律的:它的数字沿着一条蛇一样弯曲排布:那么问题来了,我们在电脑中输出都是以一行一行这样来输出的,这个矩阵的顺序明显不符合以行为参考时的输出方式,那我们就改个思路,既然不能按蛇形的顺序打印,但是我们可以按蛇形的顺序将数据存入一个数组呀,想到这里,我们就有一定方向了。首先是写好用来存储的数组和打印函数:#include<stdio.h>int main(){ int a原创 2022-04-11 22:38:51 · 7084 阅读 · 4 评论 -
1-回形矩阵
回形矩阵首先我们来看个问题:上面这个n*n的回形矩阵要怎么在程序中输出呢?我们仔细看不难看出数字都像一个海螺一样内旋增大,也就是有一定规律。但要是n一直变大,我们要怎样确定这些数字的位置呢?下面是我的解决方法:首先我创建了一个二维数组,用于存放这些数据,到时候打印只需要将这些数一个个打印出来就行了,我们先从简单做起,先创建一个数组并且写好输出的代码,毕竟凡事从简单做起嘛!int main(){ int n = 0; scanf("%d", &n); int arr[19][19]原创 2022-04-10 22:30:17 · 571 阅读 · 0 评论