
数据结构与算法
不爱写程序的程序猿
费曼学习法,就是授人以渔来巩固自己的知识,写博客的意义也亦如此
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
堆排序与新元素插入(对应王道考研数据结构)
【代码】堆排序与新元素插入(对应王道考研数据结构)原创 2022-09-10 20:46:48 · 563 阅读 · 0 评论 -
C++位图旋转(像素高宽相等简洁版)(顺时针90度)
#define _CRT_SECURE_NO_WARNINGS#pragma pack(1)#include<stdio.h>#include<stdlib.h>#include<string.h>typedef short WORD;typedef unsigned int DWORD;typedef unsigned char BYTE;//位图文件头,说明文件类型和位图数据的起始位置typedef struct { WORD bf原创 2022-05-18 11:29:52 · 554 阅读 · 1 评论 -
C++位图旋转(顺时针九十度)
#include <Windows.h>#include <stdio.h>#include <stdlib.h>int main(){ FILE *fp = fopen("D://CCode//code//位图旋转.bmp", "rb"); //rb以二进制格式打开文件 if (fp == NULL){ printf("文件打开失败\n"); } // unsigned char buffer[20]={0}; //原创 2022-05-11 09:46:34 · 1111 阅读 · 0 评论 -
Kmeans(C/C++实现,以足球队聚类为例)
#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>/*k-means算法描述(聚类-无监督学习):k-means算法的具体步骤:1)给定大小为n的数据集,令I=1,选取k个初始聚类中心 Zj(I),j=1,2,3,…,k;2)计算每个数据对象与聚类中心的距离D(xi,Zj(I)), i=1,2,原创 2022-04-15 20:40:46 · 1925 阅读 · 4 评论 -
迪杰斯特拉算法(C语言实现)
#include<stdio.h>#include<string.h>#include<math.h>//给定有向加权图G(V, E),给定源点/起始点s,求从s出发到V中其它所有顶点的权重最小的路径。(迪杰斯特拉算法描述)/*算法思路:1.逐步地发展最短路径树,直至它覆盖所有顶点。2.构造一个循环,每次循环都增加一个顶点到最短路径树上。3.从所有与树邻接的顶点中,选择离源点最近的。4.对每个顶点,都用一个距离标记(Label)来记录。5.每次循环都原创 2022-04-15 20:39:22 · 6488 阅读 · 1 评论 -
关于动态规划
本篇文章主要借鉴于:InitiativeYu转载仅用于记录学习和交流使用要理解动态规划的概念,我们需要熟悉一些主题:1. 什么是动态规划?2. 贪心算法3. 简化的背包问题4. 传统的背包问题5. LCS-最长的共同子序列6. 利用动态规划的其他问题7. 结论文章目录什么是动态规划?为什么要用动态规划?动规解题的一般思路能用动规解决的问题的特点应用动规的实例-数字三角形问题贪心算法0-1背包问题递归方法记忆化搜索动态规划算法空间复杂度的极致优化(选学,不能理解只理解上面的动态规划算法原创 2021-03-07 20:59:14 · 355 阅读 · 1 评论 -
关于全排列
对于全排列问题,我们一般使用dfs思想去解决问题,也就是需要使用递归,常见的方法有两种,数组标记法和交换法,交换法会相对更加难以理解一点,所以我一般倾向于使用数组标记法.下面给出常见的模板(java实现):数组标记法import java.util.Scanner;public class 全排列_标记法 { static Scanner sc = new Scanner(System.in); static int n = sc.nextInt(); static int result原创 2021-03-04 11:05:05 · 250 阅读 · 5 评论 -
数据结构-链表-刷题记录(part1)
本部分因为前面有较多的复习内容,所以先发布前面一部分方便大家更清晰地查阅。链表(因为是复习课,所以很多知识我会补加在注释里)首先这一部分的题需要注重对指针本身的理解,否则做题就会模棱两可的,指针虽然可以改变指向,但是是并不能改变所指对象的值的。这里引用一个指针方面的回答:在C中内存,可以划分为三种,堆、栈和静态存储区。栈就是auto变量存放区域,自动释放,在编译时候需要知道空间大小。堆一般用作开辟动态存储区,需要人工开辟,人工释放,可以在运行是开辟。比如说c中的malloc和free函数,还.原创 2020-12-28 21:54:00 · 1199 阅读 · 0 评论 -
关于单链表结构体定义结点时 LNode *LinkList的理解
typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域}LNode, *LinkList先说结论,这个就可以直接理解为第一个是便于定义变量的类型为LNode,如果没有使用typedef,定义时就需要写 struct LNode Lnode;第二个是便于定义指向LNode这个类型的指针举个栗子:在表示一个单链表时,只需声明一个头指针L,指向单链表的第一个结点(也就是头结点)Lnode *L //声明一个指原创 2020-12-24 20:54:00 · 9903 阅读 · 3 评论 -
数据结构-顺序表--刷题记录(1)
数据结构C语言综合应用题引用型参数和指针的区别:首先,引用不可以为空,但指针可以为空。前面也说过了引用是对象的别名,引用为空——对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化。其次,引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。说明:虽然引用不可以改变指向,但是可以改变初始化对象的内容。引用是变量的一个别名,调用这个别名和调用这个变量是完全一样的。所以swap2的结果可以解释。值得注意的是,由于引用时别名,所以引用并不是一种数据类型,内存并不会给原创 2020-12-20 23:28:28 · 1961 阅读 · 0 评论 -
斐波拉契数列的递归实现和非递归实现及其时间复杂度分析
斐波拉契数列的实现和时间复杂度的分析算是一个难点,在考研数据结构中也经常会碰到,今天我们就来仔细分析下和解决掉这个问题。1. 首先,我们先来看看递归形式斐波拉契数列的C语言实现:# include<stdio.h> int main(){ printf("%d",Fibonacci(5));}int Fibonacci(int n){ if(n==1 || n==2) return 1; else{ return Fibonacci(n-1)+Fibonacci原创 2020-12-14 23:06:03 · 3142 阅读 · 2 评论