
数据结构与算法分析
记录学习过程中的一些重要知识点和自己的想法
嵌入式与Linux那些事
这个作者很懒,什么都没留下…
展开
-
C语言哈希表uthash的使用方法详解(附下载链接)
工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!爱好跑步,打篮球,睡觉。欢迎加我QQ1500836631(备注优快云),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。uthash简介 由于C语言本身不存在哈希,但是当需要使用哈希表的时候自己构建哈希会异常复杂。因此,我们可以调用开源的第三方头文件,这只是一个头文件:uthash.h。我们需要做的就是将头文件复制到您的项目中,然后:#include “uthash..原创 2020-08-08 09:13:16 · 10432 阅读 · 19 评论 -
qsort函数使用方法总结(详细全面+代码)
文章目录qsort函数原型compar参数int 数组排序字符串数组排序字符串指针数组排序字符串二维数组排序整型二维数组qsort函数原型void qsort( void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) );头文件:<stdlib.h>函数功能:qsort()函数的功能是对数组进行排序,数组有nmemb个元素,每个元素大小为si原创 2020-07-12 20:46:35 · 18643 阅读 · 43 评论 -
哈希表基本概念介绍及哈希冲突的处理方法(附源码)
工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!爱好跑步,打篮球,睡觉。 欢迎加我QQ1500836631(备注优快云),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。文章目录哈希表和哈希函数的概念哈希函数的构造直接定址法数字分析法平方取中法折叠法除留余数法(常用)随机数法哈希函数的选择处理冲突的方法开放定址法再哈希法链地址法建立一个公共溢出区代码实现哈希表和哈希函数的概念 哈希表(散列表),是根据关键码值(Ke.原创 2020-07-08 20:02:14 · 3714 阅读 · 11 评论 -
查找算法之顺序查找,折半查找,二叉查找树
查找表的概念查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;反之,在查找表中做查找操作的同时进行插入数据或者删除数据的操作,称此类表为动态查找表。顺序查找顺序查找的查找过程为:从表中的最后一个数据元素开始,逐个同记录的关键字做比较,如果匹配成功,则查找成功;反之,如果直到表中第一个关键字查找完也没有成功匹配,则查找失败同时,在程序中初始化创建查找表时,由于是顺序存储,所以将所有的数据元素存储原创 2020-06-16 08:38:54 · 6848 阅读 · 0 评论 -
树的双亲表示法,孩子表示法以及孩子兄弟表示法
文章目录树的双亲表示法树的孩子表示法树的孩子兄弟表示法顺序存储和链式存储,本节来学习如何存储具有普通树结构的数据。树的双亲表示法双亲表示法采用顺序表(也就是数组)存储普通树,其实现的核心思想是:顺序存储各个节点的同时,给各节点附加一个记录其父节点位置的变量。注意,根节点没有父节点(父节点又称为双亲节点),因此根节点记录父节点位置的变量通常置为 -1。/* * @Description: 树的双亲表示法 * @Version: V1.0 * @Autor: Carlos * @Date:原创 2020-06-12 14:43:11 · 8759 阅读 · 8 评论 -
图解线索二叉树与双向线索二叉树(附源码)
文章目录线索二叉树的概念线索二叉树的结构二叉树的线索化使用线索二叉树进行遍历双向线索二叉树的概念双向线索二叉树的实现过程双向线索二叉树的遍历线索二叉树的概念当我们对普通的二叉树进行遍历时需要使用栈结构做重复性的操作。线索二叉树不需要如此,在遍历的同时,使用二叉树中空闲的内存空间记录某些结点的前趋和后继元素的位置(不是全部)。这样在算法后期需要遍历二叉树时,就可以利用保存的结点信息,提高了遍历的效率。使用这种方法构建的二叉树,即为“线索二叉树”。线索二叉树的结构每一棵二叉树上,很多结点都含有未使用的原创 2020-06-09 20:05:21 · 6440 阅读 · 4 评论 -
带你一文看懂二叉树的先(中、后)序遍历以及层次遍历(图解+递归/非递归代码实现)
工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!爱好跑步,打篮球,睡觉。欢迎加我QQ1500836631(备注优快云),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。文章目录先序遍历先序遍历规则先序遍历举例先序遍历代码(递归)先序遍历代码(非递归)中序遍历中序遍历规则中序遍历举例中序遍历代码(递归)中序遍历代码(非递归)后序遍历后序遍历规则后序遍历举例后序遍历代码(递归)后序遍历代码(非递归)层次遍历层次遍历规则层次.原创 2020-06-05 20:55:05 · 6077 阅读 · 39 评论 -
二叉树的基本概念介绍与代码实现(多图+代码)
树的基本概念树的结点结点:使用树结构存储的每一个数据元素都被称为“结点”。例如,图 1(A)中,数据元素 A 就是一个结点;父结点(双亲结点)、子结点和兄弟结点:对于图 1(A)中的结点 A、B、C、D 来说,A 是 B、C、D 结点的父结点(也称为“双亲结点”),而 B、C、D 都是 A 结点的子结点(也称“孩子结点”)。对于 B、C、D 来说,它们都有相同的父结点,所以它们互为兄弟结点。树根结点(简称“根结点”):每一个非空树都有且只有一个被称为根的结点。图 1(A)中,结点A就是整棵树的根结.原创 2020-06-01 17:57:55 · 5337 阅读 · 26 评论 -
矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法
在介绍矩阵的压缩存储前,我们需要明确一个概念:对于特殊矩阵,比如对称矩阵,稀疏矩阵,上(下)三角矩阵,在数据结构中相同的数据元素只存储一个。文章目录三元组顺序表行逻辑链接的顺序表十字链表法三元组顺序表 稀疏矩阵由于其自身的稀疏特性,通过压缩可以大大节省稀疏矩阵的内存代价。具体操作是:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间 。 如下图所示为一个稀疏矩阵,我们应该怎么样存储呢? 若对其进行压缩存储,我们可以将一原创 2020-05-30 18:25:14 · 9620 阅读 · 0 评论 -
字符串的三种存储方式
工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!爱好跑步(减肥~~),打篮球(菜鸡一枚~~),睡觉。欢迎加入嵌入式与Linux学习交流群,群号1061551626(备注优快云)。群内主要分享嵌入式学习经验,问题答疑,各种视频,电子书等。文章目录定长顺序存储动态数组存储块链存储 在数据结构中,字符串要单独用一种存储结构来存储,称为串存储结构。这里的串指的就是字符串。无论学习哪种编程语言,操作最多的总是字符串。我们平常使用最多的.原创 2020-05-25 22:50:08 · 18146 阅读 · 28 评论 -
2020中兴捧月傅里叶派记录
前段时间看到了同学转发的中兴通讯的比赛链接,之前也没有参加过算法类的比赛,这次打算报着试一试的态度参加下,增加下经验。在初步看了几个门派的题目简介后,发现只有傅里叶派比较适合自己,所以最终选择了傅里叶派。文章目录题目描述设计思路算法描述总结参考题目描述 在某片遥远的大陆上,居住着两个世代友好的部落,分别是部落A和部落B。他们一起耕耘劳作,互相帮助,亲如一家。久而久之,部落里的每个人都在对方部落里找到了志趣相投,互相欣赏的好朋友。有的人性格热情开朗,好朋友很多;有的人性格沉稳内敛,好朋友相对少一些原创 2020-05-14 15:15:19 · 5269 阅读 · 12 评论 -
循环链表练习(二)--轮盘赌游戏
游戏规则: n 个参加者排成一个环,每次由主持向左轮手枪中装一颗子弹,并随机转动关上转轮,游戏从第一个人开始,轮流拿枪;中枪者退出赌桌,退出者的下一个人作为第一人开始下一轮游戏。直至最后剩余一个人,即为胜者。要求:模拟轮盘赌的游戏规则,找到游戏的最终胜者。思路: 解决类似的问题,使用线性表的顺序存储结构和链式存储结构都能实现,根据游戏规则,在使用链式存储结构时只需使用循环链表即可轻...原创 2020-04-06 22:29:08 · 3527 阅读 · 15 评论 -
循环链表练习(一)--约瑟夫环
约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。如图所示,假设此时圆周周围有 5 个人,要求从编号为 3 的人开始顺时针数数,数到 2 的那个人出列:...原创 2020-04-06 22:25:02 · 3760 阅读 · 16 评论 -
详解双向链表的基本操作(C语言)
1.双向链表的定义上一节学习了单向链表单链表详解。今天学习双链表。学习之前先对单向链表和双向链表做个回顾。单向链表特点: 1.我们可以轻松的到达下一个节点, 但是回到前一个节点是很难的. 2.只能从头遍历到尾或者从尾遍历到头(一般从头到尾)双向链表特点 1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些 2.相对于单向链表, 必然占用...原创 2020-04-06 22:06:19 · 46242 阅读 · 50 评论 -
单链表的冒泡,快排,选择,插入,归并5种排序算法详解(多图+代码实现)
上节介绍了链表的基本操作https://blog.youkuaiyun.com/qq_16933601/article/details/105125038。这节介绍链表的5种排序算法。文章目录0.稳定排序和原地排序的定义1.冒泡排序2.快速排序3.插入排序4.选择排序5.归并排序0.稳定排序和原地排序的定义稳定排序: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的...原创 2020-04-01 22:06:11 · 10621 阅读 · 20 评论 -
史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)
1.准备工作首先包含头文件,定义链表结构体,产生随即链表的范围,定义全局头尾节点。#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 10/*定义链表*/typedef struct Node { int data; struct Node *ne...原创 2020-04-01 21:01:01 · 12658 阅读 · 21 评论 -
C语言常用字符串操作函数整理(详细全面)
char *gets(char *s);#include<stdio.h>功能: 从标准输入读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件结尾为止参数:s:字符串首地址返回值: 成功:读入的字符串 失败:NULLgets(str)与scanf(“%s”,str)的区别:gets(str)允许输入的字符串含有空格scanf(“%s”,str)不允许含有空...原创 2020-01-04 16:25:47 · 9542 阅读 · 21 评论 -
gets 、getchar 、fgets 、scanf的用法
原文地址: http://c.biancheng.net/view/379.html ...转载 2019-12-21 16:01:33 · 1431 阅读 · 0 评论 -
C primer plus 14章课后题--巨人航空公司问题
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define ture 1#define false 0#define SEATCOUNT 12#define FLIGHTCOUNT 12#define FNAME_LEN 50#define LNAME_LEN 50/*...原创 2019-12-21 15:11:13 · 890 阅读 · 0 评论 -
codeblocks官方配色CB_Colour_Themes.conf
如何使用见:http://blog.youkuaiyun.com/bat67/article/details/76102436<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><CodeBlocksConfig version="1"> <!-- application info: svn_revisi...转载 2019-12-06 10:10:08 · 921 阅读 · 0 评论 -
CodeBlocks 配色方案设置
最终效果(官方sublime修改版)官方配色codeblocks是一个功能很强大编程软件,我们在安装codeblocks后软件默认的是白底黑字界面,这种界面在长时间写代码时会对眼睛造成很大伤害,增加眼疲劳,因此我们需要一个清晰干净明了,不刺眼的编程界面。下面教我们如何配置一个养眼的编程界面。官方地址 Syntax highlighting custom colour ...转载 2019-12-06 10:06:19 · 1565 阅读 · 0 评论 -
*与++优先级
前缀递增递减和*优先级相同,从右到左;后缀递增递减比前缀优先级高,从左到右。比如int arr[5] = { 1,3,5,7,9 };int *p = arr;**++p:p先自+,然后p,最终为3——马上改变指针,*下一个指针*p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1] ————之后改变指针,*原数据,指针++(p++):效果等同于p++ —...转载 2019-12-02 16:46:05 · 2325 阅读 · 0 评论 -
节点,枝,根,叶,度,层/深度/高度,双亲/孩子/兄弟,祖先/后代,森林
建立了图(graph)的认识,“树”就好理解了。“树”是一种很特别的图(graph)。用图来定义“树”:任意2点之间都连通,并且没有“环”的图。下面的图就是一颗树,因此,树是图的特例。 当然,由于树是一种特别有用的数据结构,因此,它有着一些自身的特点和概念: 一、节点(node) 就是图(graph)的顶点(vertex)。如上图中的顶点:0,1,2,3,...转载 2019-11-30 15:42:30 · 2569 阅读 · 0 评论 -
数据结构中关于时间复杂度的理解
我们假设计算机运行一行基础代码需要执行一次运算。int aFunc(void) { printf("Hello, World!\n"); // 需要执行 1 次 return 0; // 需要执行 1 次} 那么上面这个方法需要执行 2 次运算int aFunc(int n) { for(int i = 0; i<n; i+...原创 2019-10-20 20:27:45 · 1435 阅读 · 0 评论 -
数据结构与算法分析之散列(哈希表)
什么是哈希表?哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。记录的存储位置=f(关键字)这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中,这块...转载 2019-09-30 15:01:53 · 1776 阅读 · 0 评论 -
数据结构与算法分析之表、栈和队列(二)
1.栈的概念栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有Push(进栈)和Pop(出栈),前者相当于插入,后者则是删除最后插入的元素。栈有时叫做后进先出(LIFO Last In First Out)表。2.ElementType数据结构是讨论抽象的数据存储和算法的,一种结构中元素的类型不一定是整型、字符型、浮点型或...原创 2019-09-03 09:21:07 · 1080 阅读 · 0 评论 -
数据结构与算法分析之表、栈和队列(一)
1.前驱元,后继元对于除空表外的任何表,我们说后继;(或继,之后)并称(i<N)前驱(i>1)。表中的第一个元素是,而最后一个元素是。我们将不定义的前驱元,也不定义的后继元。元素在表中的位置为i。为了简单起见,我们在讨论中将假设表中的元素是整数,但一般说来任意的复元素也是允许的。ADT (abstract data type )抽象数据类型2.链表概念链表由一系列不必...原创 2019-08-26 16:50:29 · 1683 阅读 · 0 评论