- 博客(17)
- 收藏
- 关注
原创 数据结构与算法之哈夫曼树与哈夫曼编码
哈夫曼树对于哈夫曼树,凡是学过离散数学的同学肯定不会陌生,这里我们简略它的介绍。哈夫曼树就是最优二叉树,即叶子个数和各个叶子的权值确定的情况下,树的带权路径长度(树中所有叶子结点的带权路径(带权路径即结点到树根的路径长度与结点权的乘积)之和)WPL最小。具体画哈夫曼树的方法见:https://jingyan.baidu.com/article/a501d80c16dfa0ec620f5e70.html对于哈夫曼树的存储我们一般采用静态三叉链表,如下所示:weight:权值Parent:双亲结点
2021-11-02 19:41:13
3619
原创 PTA练习之约瑟夫问题
Josephus问题描述:编号为1,2,…,n的n个人按顺时针方向围坐在一张圆桌周围,每人持有一个密码(正整数)。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的那个人出列,将他的密码作为新的m值,从他顺时针方向的下一个人开始重新从1报数,数到m的那个人又出列;如此下去,直至圆桌周围的人全部出列为止。要求按出列顺序输出n个人的编号。输入格式:第一行输入两个整数,依次表示人数n和初始化密码m,以空格间隔。 第二行依次输入n个整数,分别表示n个人的密码
2021-09-12 15:00:10
2939
原创 数据结构与算法学习笔记(二)单链表的逆置与循环链表
单链表的逆置思路:现将头表置空,随后使用头插法进行操作。具体单链表操作见文章:链表的基本操作分别定义两个指针一个指向移动的数据,另一个指向下一个数据进行移动。void Reverse_linklist(Linklist H){ Linklist p, q; p = H->next; H->next = NULL;//置空表 while(p) { q = p; p = p->next; q-&g
2021-09-12 10:25:03
240
原创 数据结构与算法学习笔记(一) 顺序表
学校开始了数据结构与算法的课程,为了巩固学习,对此课程进行了总结和记录以及练习。顺序表的插入、删除和查找#include <stdio.h>#include <stdlib.h>#define Maxsize 10这里的Maxsize 为顺序表可能达到的最大长度,这里的线性表,我选择使用int型的简单数据存储顺序表的定义typedef struct List{ int elem[Maxsize];//存储当前空间 int length;//线性表的长
2021-09-06 20:29:30
135
1
原创 STM32学习笔记之三角波的实现(寄存器版本)
三角波本次实验采用STM32F1,请注意辨别!!!前言咳咳,三角波对于我这个初学者来说,太折磨了!!!主要原因还是我比较菜!第一天,在学习PWM后决定使用PWM生成三角波,结果出现各种各样奇葩的波形,比如梯子状,陡坡状·····哎,不说了,都是泪,在查看了中文参考手册时,我才发现可以通过DAC来进行生成三角波·····除了参考中文手册,以及在网上查找资料(结果都是库函数版的),于是通过搜集各个式样的生成步骤,终于得到了这样的波:还是很像三角波吧。(才怪!)我就陷入了无休止的调改和尝试中。正文
2021-06-03 18:31:58
1751
1
原创 STM32学习笔记之PWM实验2 方波的产生(寄存器版本)
方波产生经过上次学习,可以通过PWM完成呼吸灯。本次实验是在呼吸灯的基础上进行改进,关于PWM的基础知识请移步上一篇文章。接下来对上篇文章的代码进行如下改进:time.h#ifndef __TIMER_H#define __TIMER_H#include "sys.h"#define LED0_PWM_VAL TIM3->CCR4 //void TIM3_Int_Init(u16 arr,u16 psc);void TIM3_PWM_Init(u16 arr,u16 psc)
2021-06-03 17:49:43
3886
2
原创 STM32学习笔记之呼吸灯实验
STM32呼吸灯实验(寄存器版本)在继定时器中断之后,开始PWM的学习,脉冲宽度调制(PWM),是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。以下就是原子的PWM的原理图图中,我们假定定时器工作在向上计数PWM模式,且当CNT<CCRx时,输出0,当CNT>=CCRx时输出1。那么就可以得到如上的PWM示意图:当CNT值小于CCRx的时候,IO输出低电平(0),当CNT值大于等于CCRx的时候,IO输出高电平(1),当CNT达到ARR
2021-05-26 21:37:56
1916
原创 数据结构学习笔记之队列和栈
初学队列queue引例:解密QQ号解密规则如下:给入一串数字,首先将第一个数删除,再将第二个数放在末尾,再删除第三个数将第四个数放在末尾,再将第五个数删除······以此类推·最后把删除的数字依次序读出。例如:123456 ==> 34562 ===> 5624 ===> 246 ===> 64 ===>4======> 135264我们引出两个整型变量 head和tail。head用来记录队列的队首,tail用来记录队列的对尾的下一个位置。我们在这里利用队
2021-05-24 21:45:08
391
原创 STM32学习笔记之外部中断实验(寄存器版本)
外部中断实验了解一下:外部中断中,需要设置优先级。抢占优先级高于响应优先级,数值越小,优先级越高。可以参考《STM32参考手册(寄存器版本)》“sys.h"的中断管理函数 。外部中断的步骤:1.初始化IO口(仿照前面所学的LED实验中的初始化,原理相同)2.开启IO复用时钟并设置触发条件。这里用到的函数为void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)这里的三个参数分别是代表GPIOA~G,需要使能的位,触发模式其中,触发模式TRLM:常用 RTIR
2021-05-21 21:35:20
507
原创 数据结构学习笔记之绪论
基本概念和术语数据结构的学习我是按照《大话数据结构》这本书来学习的,首次看了前言觉得不错,做了一些学习笔记,都是从书中读到的重点,希望对大家有所帮助。1.1数据我们先谈一下,什么是数据?概念:数据是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据可以是整型等数值类型,也可以是声音、图像、视频等非数值类型。其实,通俗来说,数据就是符号,具备一下两个前提:1.可以输入到计算机中2.能被计算机程序处理它可以是整型、实型等数值类型,也可以是字符类型,
2021-05-17 22:36:21
235
原创 STM32之3*3矩阵键盘
STM32学习笔记之矩阵键盘今天来谈谈矩阵键盘实验!首先,继承学长们的矩阵键盘,有时间要自己焊一手先!焊接方式如下:六个接线口分别对应三行三列,连接PB5~PB10接线如下:key.h#ifndef __KEY_H#define __KEY_H#include "sys.h"u8 KEY_Init(void);#endifkey.c#include "stm32f10x.h"#include "key.h"#include "sys.h"#include "delay.h
2021-05-08 22:11:58
2074
原创 STM32之跑马灯实验(笔记)
STM32学习笔记—跑马灯咳咳,学习了STM32若干天(由于事情较多搁置了好多),在原子哥的带领下搭建了环境,还有学习了一些比较常用的功能,包括串口调试,软件仿真,串口下载等等,终于接触到了第一个实验——跑马灯。跟以前学arduino的时候一样,看视频自学,依旧是先按着模板抄着写,根本搞不懂里面的操作,硬着头皮往下弄!嗯嗯······还是有效果的,通过仿照模板,灯最终也被点量了!可是,这个是板上自带的LED,也是按照模板来的。于是觉得应该自己写才行,于是,我外接了一个LED,来练习代码。以PB5
2021-05-07 23:40:08
863
原创 递归
#递归练习##什么是递归? 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,
2021-04-14 20:05:36
77
原创 初学C之 二进制转换问题
#二进制转换要求:32位机器,输入数字不考虑负数。这里我们只谈代码(初学者适用)://转换二进制,num [0~36327]#include<stdio.h>//不会补全 void Convertbinary1 (int num){ if(num==0) { printf("0"); } while(num) { if(num%2) printf("1"); else print
2021-04-09 21:16:15
100
原创 LeetCode 每日一题: 数字的补数
#Numbwe Complement题目描述:给你一个 正 整数 num ,输出它的补数。补数是对该数的二进制表示取反。示例 1:输入:num = 5输出:2解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。示例 2:输入:num = 1输出:0解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-co
2021-04-09 20:56:54
416
原创 链表的基本操作#周报
链表的基本操作 在说链表之前,我们先说说顺序存储。其中我们最熟悉的一种顺序存储的数据结构就是数组,当我们想要给数组中插入一个元素时,为保证顺序以及其他元素不丢失,我们需要在插入元素后,将后面的元素整体后移。所以容易看出这样有着这两个弊端:第一:我们所需要移动的元素有很多时,会浪费算力。第二:我们必须为数组开足够多的空间,否则会存在溢出风险。 为了避免这两个弊端,我们引入链式存储——链表。 什么是链表? 简单来说,链表的利用结构体,额外开辟出一份内存空间去作指针,它总是指向下一个结点,
2020-12-13 15:12:50
257
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人