【我的创作纪念日】

news2024/11/28 2:31:36

机缘

大家好,我是圥忈ゼ, 2023 年 07 月 20 日,我撰写了第 1 篇技术博客:《我的编程未来规划》,也是由于我高考后的专业选择,和就业方向的选择,加上想立志成为一名专业 IT 作者,我结实了CSDN这个优秀,强大的平台,是CSDN给了我创作的平台,机会,和流量,让我一步步走向现在的128天了,在这段时间里,我已经获得了更大的成长。可能虽然日常忙碌但我还在坚持创作、可能初心还在但博客已良久未更新。最初成为创作者的初心,是为了记录自己的学习和成长历程,同时也希望能够通过分享自己的经验和知识,帮助更多的人。在这个过程中,我发现写作不仅可以加深自己对知识的理解,还可以锻炼自己的表达能力和思维能力。通过写作,我可以更加清晰地梳理自己的思路,并且将自己的想法传达给其他人。此外,写作还可以帮助我与其他志同道合的人交流和互动,扩展自己的人脉和视野。


收获

在创作的过程中,我获得了440位粉丝的关注,也得到了很多正向的反馈,如获得1,399次点赞、内容获得839次评论、获得838次收藏、28,404的阅读量等。这些反馈让我感到自己的努力得到了认可,也让我更加有动力继续创作。同时,我也认识了很多志同道合的领域同行和大佬比如:东离与糖宝,江城开朗的豌豆,Aileen_0v0,等等,很多优秀的大佬我们一起交流和学习,互相鼓励和支持。


日常

当前创作已经成为了我生活的一部分。虽然日常工作和学习非常忙碌,但我仍然会抽出时间来写作。在有限的精力下,我会平衡创作和工作学习,合理安排时间,确保自己能够兼顾两者。


成就

1.过去写得最好的一段代码是一个实现数据结构和算法的代码数据结构 —— 堆的实现(顺序表),它高效地解决了一个时间复杂度很高的排序问题和在大量的数据中筛选前top-k最值的问题。这段代码不仅在性能上表现出色,而且在代码的可读性和可维护性方面也做得很好。代码如下:

一.头文件的实现 —— (Heap.h)

Heap.h
#pragma once


#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>


//小堆
typedef int HPDataType;
typedef struct Heap
{
	HPDataType* a;
	int size;
	int capacity;
}HP;

//创建/销毁
void HeapInit(HP* php);
void HeapDestroy(HP* php);
//插入/删除
void HeapPush(HP* php, HPDataType x);
void HeapPop(HP* php);
//获取堆顶元素
HPDataType HeapTop(HP* php);
//判空/统计堆内元素个数
bool HeapEmpty(HP* php);
int HeapSize(HP* php);
//交换函数
void Swap(HPDataType* p1, HPDataType* p2);
//向上调整
void AdJustUp(HPDataType* a, int child);
//向下调整
void AdJustDown(HPDataType* a, int size, int parent);

二.源文件的实现 —— (Heap.c)

1.小堆的源文件
Heap.c
#include"Heap.h"


//小堆
//创建/销毁
void HeapInit(HP* php)
{
	assert(php);
	php->a = NULL;
	php->size = 0;
	php->capacity = 0;
}
void HeapDestroy(HP* php)
{
	assert(php);
	free(php->a);
	php->a = NULL;
	php->size = php->capacity = 0;
}

//交换函数
void Swap(HPDataType* p1, HPDataType* p2)
{
	HPDataType tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

//向上调整函数
void AdJustUp(HPDataType* a, int child)
{
	int parent = (child - 1) / 2;
	while (child > 0)
	{
		if (a[child] < a[parent])
		{
			Swap(&a[child], &a[parent]);
			child = parent;
			parent = (child - 1) / 2;
		}
		else
		{
			break;
		}
	}
}
//插入/删除
void HeapPush(HP* php, HPDataType x)
{
	assert(php);
	if (php->size == php->capacity)//判断数组空间不够就扩容
	{
		int newcapacity = php->capacity == 0 ? 4 : php->capacity * 2;
		HPDataType* tmp = (HPDataType*)realloc(php->a, newcapacity * sizeof(HPDataType));
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(-1);
		}
		php->a = tmp;
		php->capacity = newcapacity;
	}
	php->a[php->size] = x;
	php->size++;
	AdJustUp(php->a, php->size - 1);

}
//向下调整函数
void AdJustDown(HPDataType* a, int size, int parent)
{
	int child = parent * 2 + 1;
	while (child < size)
	{
		if (child+1 < size && a[child + 1] < a[child])
		{
			child++;
		}
		if (a[child] < a[parent])
		{
			Swap(&a[child], &a[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}
void HeapPop(HP* php)
{
	assert(php);
	Swap(&php->a[0], &php->a[php->size - 1]);
	php->size--;
	AdJustDown(php->a, php->size, 0);
}
//获取堆顶元素
HPDataType HeapTop(HP* php)
{
	assert(php);
	assert(php->size > 0);
	return php->a[0];

}
//判空/统计堆内元素个数
bool HeapEmpty(HP* php)
{
	assert(php);
	return php->size == 0;
}
int HeapSize(HP* php)
{
	assert(php);
	assert(php->size > 0);
	return php->size;
}

2.大堆的源文件
Heap.h
#include"Heap.h"


//大堆
//创建/销毁
void HeapInit(HP* php)
{
	assert(php);
	php->a = NULL;
	php->size = 0;
	php->capacity = 0;
}
void HeapDestroy(HP* php)
{
	assert(php);
	free(php->a);
	php->a = NULL;
	php->size = php->capacity = 0;
}

//交换函数
void Swap(HPDataType* p1, HPDataType* p2)
{
	HPDataType tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

//向上调整函数
void AdJustUp(HPDataType* a, int child)
{
	int parent = (child - 1) / 2;
	while (child > 0)
	{
		if (a[child] > a[parent])
		{
			Swap(&a[child], &a[parent]);
			child = parent;
			parent = (child - 1) / 2;
		}
		else
		{
			break;
		}
	}
}
//插入/删除
void HeapPush(HP* php, HPDataType x)
{
	assert(php);
	if (php->size == php->capacity)//判断数组空间不够就扩容
	{
		int newcapacity = php->capacity == 0 ? 4 : php->capacity * 2;
		HPDataType* tmp = (HPDataType*)realloc(php->a, newcapacity * sizeof(HPDataType));
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(-1);
		}
		php->a = tmp;
		php->capacity = newcapacity;
	}
	php->a[php->size] = x;
	php->size++;
	AdJustUp(php->a, php->size - 1);

}
//向下调整函数
void AdJustDown(HPDataType* a, int size, int parent)
{
	int child = parent * 2 + 1;
	while (child < size)
	{
		if (child+1 < size && a[child + 1] > a[child])
		{
			child++;
		}
		if (a[child] > a[parent])
		{
			Swap(&a[child], &a[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}
void HeapPop(HP* php)
{
	assert(php);
	Swap(&php->a[0], &php->a[php->size - 1]);
	php->size--;
	AdJustDown(php->a, php->size, 0);
}
//获取堆顶元素
HPDataType HeapTop(HP* php)
{
	assert(php);
	assert(php->size > 0);
	return php->a[0];

}
//判空/统计堆内元素个数
bool HeapEmpty(HP* php)
{
	assert(php);
	return php->size == 0;
}
int HeapSize(HP* php)
{
	assert(php);
	assert(php->size > 0);
	return php->size;
}

三.源文件的实现 —— (test.c)

test.c
#include"Heap.h"

//小堆
//int main()
//{
//	HP ph;
//	HeapInit(&ph);
//
//	int a[] = { 4,6,2,1,5,8,2,9};
//	for (int i = 0; i < (sizeof(a) / sizeof(int)); i++)
//	{
//		HeapPush(&ph, a[i]);//插入
//	}
//
//	//获取前k个最小值
//	/*int k = 3;
//	while (k--)
//	{
//		printf("%d\n", HeapTop(&ph));
//		HeapPop(&ph);
//	}*/
//	//小堆排序
//	while (!HeapEmpty(&ph))
//	{
//		printf("%d ", HeapTop(&ph));
//		HeapPop(&ph);
//	}
//
//	return 0;
//}

//大堆
//int main()
//{
//	HP ph;
//	HeapInit(&ph);
//	int a[] = { 4,6,2,1,5,8,2,9 };
//	for (int i = 0; i < (sizeof(a) / sizeof(int)); i++)
//	{
//		HeapPush(&ph, a[i]);
//	}
//	//前k个最大值
//	/*int k = 3;
//	while (k--)
//	{
//		printf("%d\n", HeapTop(&ph));
//		HeapPop(&ph);
//	}*/
//	//大堆排序
//	while(!HeapEmpty(&ph))
//	{
//		printf("%d ", HeapTop(&ph));
//		HeapPop(&ph);
//	}
//	return 0;
//}

//升序
//void HeapSort(int* a, int n)
//{
//	//建大堆/向上调整建堆/O(N*longN)
//	/*for (int i = 0; i < n; i++)
//	{
//		AdJustUp(a, i);
//	}*/
//	int end = n - 1;
//	//向下调整建堆
//	// O(N)
//	for (int i = (n - 1 - 1) / 2; i >= 0; i--)
//	{
//		AdJustDown(a,n, i);
//	}
//	//O(N*longN)
//	while(end > 0)
//	{
//		Swap(&a[0], &a[end]);
//		AdJustDown(a, end, 0);
//		end--;
//	}
//}

//降序
//void HeapSort(int* a, int n)
//{
//	建小堆/向上调整建堆/O(N*longN)
//	/*for (int i = 0; i < n; i++)
//	{
//		AdJustUp(a, i);
//	}*/
//	int end = n - 1;
//	向下调整建堆
//	 O(N)
//	for (int i = (n - 1 - 1) / 2; i >= 0; i--)
//	{
//		AdJustDown(a, n, i);
//	}
//	O(N*longN)
//	while (end > 0)
//	{
//		Swap(&a[0], &a[end]);
//		AdJustDown(a, end, 0);
//		end--;
//	}
//}
//int main()
//{
//	int a[] = { 4,6,2,1,5,8,2,9 };
//	int size = sizeof(a) / sizeof(int);
//	HeapSort(a, size);
//	for (int i = 0; i < size; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	printf("\n");
//	return 0;
//}




//创造数据通过随机数
//void CreateNDate()
//{
//	int n = 100000;
//	srand(time(0));
//	const char* file = "date.txt";
//	FILE* fin = fopen(file, "w");
//	if (fin == NULL)
//	{
//		perror("fopen error");
//		return;
//	}
//	for (int i = 0; i < n; i++)
//	{
//		int x = (rand() + i) % 100000;
//		fprintf(fin, "%d\n", x);
//	}
//	fclose(fin);
//}
//
//void PrintTopk(const char* file, int k)
//{
//	FILE* fout = fopen(file, "r");
//	if (fout == NULL)
//	{
//		perror("fopen error");
//		return;
//	}
//	int* minheap = (int*)malloc(sizeof(int) * k);
//	if (minheap == NULL)
//	{
//		perror("malloc error");
//		return;
//	}
//	//创建一个k个值的小堆
//	for (int i = 0; i < k; i++)
//	{
//		fscanf(fout, "%d", &minheap[i]);
//		AdJustUp(minheap, i);
//	}
//	//让后从文件先读取k个数,形成小堆,让后再依次读取文件的数据和堆顶的数据比对,
//	// 如果比堆顶的数大就覆盖替换,让后向下调整,再形成小堆,
//	// 最后堆里剩下的就是这些数据里最大的前k个值
//	int x = 0;
//	while (fscanf(fout, "%d", &x) != EOF)
//	{
//		if (x < minheap[0])
//		{
//			minheap[0] = x;
//			AdJustDown(minheap, k, 0);
//		}
//	}
//
//	for (int i = 0; i < k; i++)
//	{
//		printf("%d ", minheap[i]);
//	}
//	printf("\n");
//
//	free(minheap);
//	fclose(fout);
//
//
//}


//创造数据通过随机数
void CreateNDate()
{
	int n = 100000;
	srand(time(0));
	const char* file = "date.txt";
	FILE* fin = fopen(file, "w");
	if (fin == NULL)
	{
		perror("fopen error");
		return;
	}
	for (int i = 0; i < n; i++)
	{
		int x = (rand() + i) % 100000;
		fprintf(fin, "%d\n", x);
	}
	fclose(fin);
}

void PrintTopk(const char* file, int k)
{
	FILE* fout = fopen(file, "r");
	if (fout == NULL)
	{
		perror("fopen error");
		return;
	}
	int* minheap = (int*)malloc(sizeof(int) * k);
	if (minheap == NULL)
	{
		perror("malloc error");
		return;
	}
	//创建一个k个值的大堆
	for (int i = 0; i < k; i++)
	{
		fscanf(fout, "%d", &minheap[i]);
		AdJustUp(minheap, i);
	}
	//让后从文件先读取k个数,形成大堆,让后再依次读取文件的数据和堆顶的数据比对,
	// 如果比堆顶的数小就覆盖替换,让后向下调整,再形成大堆,
	// 最后堆里剩下的就是这些数据里最小的前k个值
	int x = 0;
	while (fscanf(fout, "%d", &x) != EOF)
	{
		if (x < minheap[0])
		{
			minheap[0] = x;
			AdJustDown(minheap, k, 0);
		}
	}

	for (int i = 0; i < k; i++)
	{
		printf("%d ", minheap[i]);
	}
	printf("\n");

	free(minheap);
	fclose(fout);


}
int main()
{
	//CreateNDate();
	PrintTopk("date.txt", 5);
	return 0;
}

堆排序和top-k问题展示

展示图片来源于文章-数据结构 —— 堆的实现(顺序表)
在这里插入图片描述


憧憬

关于职业规划,我希望能够在技术领域不断深入学习和探索,成为一名专业的 IT 作者。同时,我也希望能够继续创作,分享更多有价值的内容,帮助更多的人。

创作规划方面,我希望能够更加系统地整理和总结自己的知识和经验,写出更加深入和专业的文章。同时,我也希望能够尝试不同的创作形式,如视频、直播等,与更多的人进行互动和交流。

以上就是我的纪念日博客,希望未来的日子里,我能够继续保持创作的热情,不断进步和成长。

Tips

  1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
  2. 优质的纪念文章将会获得神秘打赏哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1259361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker | Docker部署MySQL

Docker | Docker部署MySQL ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Docker系列…

Python交互式解释器及用法

为了让开发者能快速学习、测试 Python 的各种功能&#xff0c;Python 提供的“python”命令不仅能用于运行 Python 程序&#xff0c;也可作为一个交互式解释器一一开发者逐行输入 Python 代码&#xff0c;它逐行解释执行。 当输入“python”命令时&#xff0c;可以看到如下输出…

IDEA的安装与删除插件

不小心安装了一个英文转中文的插件&#xff0c;看不习惯&#xff0c;决定重新变回英文 先点击这个settings的安装 然后就看到这个下面这张图了 如果是安装就点install&#xff0c;不用了就和我一样把这个勾给去掉

计算计能力挑战赛选择题真题(2020、2021、2022)

2020 1.关于联合体和结构体错误的是&#xff08;a) a.联合体union的存放顺序是所有成员都从高地址开始存放的(x) (ps:联合体union的存放顺序是所有成员都从低地址开始存放的) b.联合体中可以定义多个成员&#xff0c;联合体的大小由最大的成员的大小决定。 c.可以使用匿名…

ChatGLM2详细安装部署(chatglm2大模型安装步骤三)

ChatGLM2安装部署 1.服务器配置 服务器系统:Centos7.9 x64 显卡:RTX3090 (24G) 虚拟环境:Miniconda3 2.安装部署 2.1 ChatGLM2下载 输入命令:git clone https://github.moeyy.xyz/https://github.com/THUDM/ChatGLM2-6B.git 输入命令:cd ChatGLM2-6B 注:https://g…

瓶盖内的条码需要注意哪些?,才能帮助企业有效搭建与消费者沟通~

在不断发展的消费品领域&#xff0c;特别是饮料行业&#xff0c;组织不断寻求创造性的方法来扩大客户参与度、增强品牌忠诚度并消除假冒产品。一种获得认可的新兴方法是在瓶盖和瓶盖上实施DataMatrix 条形码扫描。这种创新方法提供了许多好处&#xff0c;从改善消费者互动到强化…

idea 旧项目替换成新项目(项目名称,模块,代码)

文章目录 修改项目名替换模块、文件前缀全局替换包名局部替换xml、yml等其他文件 修改项目名 右击项目名称->Refactor->Rename(shiftF6) ctrlaltshifts 替换模块、文件前缀 git bash执行如下脚本 #/bin/bash # 单目录替换 for f in old-prefix*; do mv "$f…

用java实现王者荣耀

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; impo…

openGauss学习笔记-133 openGauss 数据库运维-例行维护-日维护检查项

文章目录 openGauss学习笔记-133 openGauss 数据库运维-例行维护-日维护检查项133.1 检查openGauss状态133.2 检查锁信息133.3 统计事件数据133.4 对象检查133.5 SQL报告检查133.6 备份133.7 基本信息检查 openGauss学习笔记-133 openGauss 数据库运维-例行维护-日维护检查项 …

SEOAI每周资讯和Linus思考 231127

欢迎查看 Linus筋斗云SEO 的每周资讯整理&#xff0c;本周的一些要点&#xff1a; Google11月核心更新和评论更新仍然没有结束9个搜索结果页的主要变化&#xff1a;图标、品牌、粉丝数、新模块GSC已索引页面狂掉&#xff1f;Google的问题&#xff0c;已修复黑五网一期间的搜索…

域名邮箱与企业邮箱的区别:功能、应用与优势

根据使用者的不同需求&#xff0c;电子邮件分为域名邮箱和企业邮箱两种类型。那么这两种邮箱之间究竟存在哪些区别呢&#xff1f;本文将从定义、优势和劣势三个方面进行详细解析。 什么是域名邮箱&#xff1f; 域名邮箱&#xff0c;顾名思义是以域名作为后缀的电子邮箱。域名邮…

vue 表格虚拟滚动

参考未整理 1.使用vxetable实现 官网 问题&#xff1a; 实现了表格的虚拟滚动&#xff0c;但是单元格数据不自动换行了 &#xff0c;如下显示的... 然后在官网看到是这样的&#xff0c;那我不是白写。。。 解决&#xff1a; 1.包一层div2.再写个换行样式 <vxe-column …

SPSS多维尺度分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

java编程:⼀个⽂件中存储了本站点下各路径被访问的次数,请编程找出被访问次数最多的10个路径

题目 编程题&#xff1a;⼀个⽂件&#xff08;url_path_statistics.txt&#xff09;中存储了本站点下各路径被访问的次数 请编程找出被访问次数最多的10个路径时间复杂是多少&#xff0c;是否可以优化&#xff08;假设路径数量为n&#xff09;如果路径访问次数⽂件很⼤&#x…

深度学习中小知识点系列(二) 解读仿射变换和透视变换

综述 所有复杂的东西&#xff0c;都是由基本的组成的。所以我们需要先了解一下基础的变换有哪些&#xff1a; 平移 我们对矩形&#xff08;图像&#xff09;平移&#xff0c;需要怎么做&#xff1f; 对每一个像素点坐标平移。可以让每一个像素点的x,y坐标都加一个变量。 矩…

我叫:归并排序【JAVA】

1.认识我一下 1.归并排序(MERGE-SORT)利用归并的思想实现的排序方法,该算法采用经典的分治策略2.分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起&#xff0c;即分而治之。 2.分合思想 3 分久必合 /*** 合并** param arr …

好用的6个AI写作工具推荐,热门AI写作软件有哪些?

人工智能的快速发展催生了许多创新的应用&#xff0c;其中之一就是AI写作软件。这些免费的AI写作软件通过借助先进的自然语言处理技术&#xff0c;可以帮助写作者和创作者提升创作效率。本文将为大家介绍七款免费的AI写作软件&#xff0c;它们功能强大且易于使用。 我们来看看O…

基于Springboot的墙绘产品展示交易平台(有报告),Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的墙绘产品展示交易平台&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff0…

YOLOv8优化策略:自适应改变核大小卷积AKConv,效果优于标准卷积核和DSConv |2023.11月最新成果

🚀🚀🚀本文改进: AKConv 中,通过新的坐标生成算法定义任意大小的卷积核的初始位置。 为了适应目标的变化,引入了偏移量来调整每个位置的样本形状。 此外,我们通过使用具有相同大小和不同初始采样形状的 AKConv 来探索神经网络的效果。 AKConv 通过不规则卷积运算完成…

pinyin4j 汉字转拼音包括——多音字

一、Maven 依赖 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.1</version> </dependency> 二、通过多音字字典匹配 2.1&#xff0c;先看效果效果 输入&#xff1a;我在重庆…