当前位置: 首页 > backend >正文

艾莉丝努力练剑的创作纪念日:星河初启,牧梦长空


🔥个人主页艾莉丝努力练剑

❄专栏传送门:《C语言》《数据结构与算法》C语言刷题12天IO强训LeetCode代码强化刷题洛谷刷题C/C++基础知识知识强化补充C/C++干货分享&学习过程记录

🍉学习方向:C/C++方向学习者

⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平


座右铭:效法羲和驭天马,志在长空牧群星!



目录

​编辑

一、机缘

二、收获

三、日常

四、成就

4.1  动态顺序表

1、SeqList.h

2、SeqList.c

3、Test.c

4.2  内存池初始化实现

五、憧憬

结尾


一、机缘

2024年12月23日,在朋友的推荐下,我怀揣着对技术的向往加入了CSDN,当时临近期末周,并且对编程语言、操作系统等的知识点也不熟悉,而且当时还处在一个迷茫、无所适从、摸着石头过河的阶段,因此很长一段时间,我都没有正式迈入CSDN博主的行列。真正的创作之旅,始于2025年4月26日——一个值得铭记的日子

——也是我梦想的开始!创作我的“处女作”C语言学习的第一篇blog。

最初提笔的动机很纯粹:记录自学路上的思考,整理实战项目中碎片化的经验。我认为,博客无非就是两个用途——作为知识回顾的笔记、记录问题的常见问题解析 效法羲和驭天马,志在长空牧群星! 我相信,知识的价值在于流动,而写作正是最好的载体。就像驾驭天马巡游长空,我希望通过文字,将技术世界的星辰大海尽收眼底,与更多同行者分享这片璀璨星空。

从第一篇《C语言常见概念、数据类型以及变量的一些重要知识点总结》解析开始,我逐渐发现:写作不仅是输出,更是对知识的深度重构。每一个算法思路的梳理,每一段代码的锤炼,都让我对编程有了更深刻的理解。


二、收获

在这段星河初启的旅程中,我收获了无数温暖与惊喜:

🌟 截止博主创作这篇感想时,这128天的创作之旅让我获得了 1182 位星友的陪伴,每一个关注都是夜空中最亮的星。

📚 截止博主创作这篇感想时,我创作的博客、发表的动态等内容获得了 4326 次点赞416 条深度讨论3054 次收藏。

🤝 结识了草莓熊Lotso大佬等众多志同道合的技术同行,在C++深潜、算法优化、工具链构建等领域相互启迪,让我万分感激。

🏆 这个月我还入选了《本周创作者榜》第95名,这是星河旅程中的一个重要的坐标点。

最让我感动的是,很多读者会成为文章的"共笔人",在评论区补充案例、指正疏漏、分享实践——这让每篇文章都成为了集体智慧的结晶。


三、日常

常看到有人疑问:“如何平衡博客创作与学习工作?没有时间怎么办?感觉很难坚持下来怎么办?”

我想说:创作本就是学习的一种形态

博客对我来说,就是“作为知识回顾的笔记、记录问题的常见问题解析”

我不将其视为额外负担,而是作为技术思考的自然延伸。在解决一个复杂bug后,在理解某个底层机制时,在完成项目重构之际——我会顺势记录下其中的思考脉络。这既是对知识的淬炼,也是"以输出倒逼输入"的成长方式。

就像羲和驭天马,需要把握节奏与方向。可以用Markdown保持书写流畅,用InsCode AI辅助代码审查,用专栏分类管理知识体系。这些工具让创作成为可持续的愉快旅程,而非负担。

当然,我还没有尝试过用Markdown来进行博客创作,博主未来会尝试一下!这里其实只是举个例子,创作不仅可以收获知识、提高技术文章的写作能力,也能收获关注和机遇。


四、成就

我认为截止目前,在我的博客里面最有意义的一段代码应该是【动态顺序表】各个接口函数的实现,增删查改——尾插、头插、尾删、头删、指定位置插入、指定位置之前插入、指定位置之后插入、指定位置删除、查找、修改,让我得以管中窥豹地窥见了数据结构的奥妙,也启发了我学习链表、栈、队列、二叉树、排序等其它的初阶的数据结构的知识点学习。

4.1  动态顺序表

1、SeqList.h

#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
//增强代码可维护性
typedef int SLDataType;typedef struct SeqList
{SLDataType* a;int capacity;//容量int size;//有效数据个数
}SL;void SLInit(SL* ps);
void SLPrint(SL* ps);
void SLDestory(SL* ps);
//增删查改等接口函数
//尾插
void SLPushBack(SL* ps, SLDataType x);
//头插
void SLPushFront(SL* ps, SLDataType x);
//尾删
void SLPopBack(SL* ps);
//头删
void SLPopFront(SL* ps);//随机位置插入——pos位置
void SLInsert(SL* ps, int pos, SLDataType x);
//随机位置之前插入——pos位置
void SLInsertBefore(SL* ps, int pos, SLDataType x);
//随机位置之后插入——pos位置
void SLInsertAfter(SL* ps, int pos, SLDataType x);
//随机位置删除——pos位置
void SLErase(SL* ps, int pos);//查找
int SLFind(SL* ps, SLDataType x);//修改
void SLModity(SL* ps, int pos, SLDataType x);

2、SeqList.c

#define  _CRT_SECURE_NO_WARNINGS  1
#include"SeqList.h"//初始化
void SLInit(SL* ps)
{ps->a = NULL;ps->capacity = 0;ps->size = 0;
}//销毁
void SLDestory(SL* ps)
{if (ps->a)free(ps->a);ps->a = NULL;ps->size = ps->capacity = 0;
}//检查容量
void SLCheckCapacity(SL* ps)
{//满了扩容if (ps->size == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;SLDataType* tmp = realloc(ps->a, newcapacity * sizeof(SLDataType));if (tmp == NULL){printf("realloc fail!");exit(-1);}else{ps->a = tmp;ps->capacity = newcapacity;}}
}//尾插
void SLPushBack(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);ps->a[ps->size] = x;ps->size++;
}//头插
void SLPushFront(SL* ps, SLDataType x)
{SLCheckCapacity(ps);int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];end--;}ps->a[0] = x;ps->size++;
}//尾删
void SLPopBack(SL* ps)
{assert(ps->size > 0);ps->a[ps->size - 1] = 0;ps->size--;
}//头删
void SLPopFront(SL* ps)
{assert(ps->size > 0);int start = 1;while (start < ps->size){ps->a[start - 1] = ps->a[start];++start;}ps->size--;
}//随机位置插入
void SLInsert(SL* ps, int pos, SLDataType x)
{assert(ps->size > 0);SLCheckCapacity(ps);int end = ps->size - 1;while (end >= pos){ps->a[end + 1] = ps->a[end];--end;}ps->a[pos] = x;ps->size++;
}//随机位置之前插入——pos位置
void SLInsertBefore(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos < ps->size);SLCheckCapacity(ps);for (int i = ps->size; i > pos; i--){ps->a[i] = ps->a[i - 1];}ps->a[pos] = x;ps->size++;
}//随机位置之后插入——pos位置
void SLInsertAfter(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos < ps->size);SLCheckCapacity(ps);ps->a[pos] = x;ps->size++;
}//随机位置删除——删除pos位置的数据
void SLErase(SL* ps, int pos)
{assert(ps);//pos:[0,ps->size)assert(pos >= 0 && pos < ps->size);////杭哥代码——删除的似乎是pos之后的值//int start = pos + 1;//while (start < ps->size)//{//	ps->a[start - 1] = ps->a[start];//	++start;//}//ps->size--;////杭哥代码——删除的是pos位置的值//int start = pos;//while (start < ps->size)//{//	ps->a[start - 1] = ps->a[start];//	++start;//}//ps->size--;//绵姐代码——删除pos位置的代码//pos后面的数据向前挪动一位for (int i = pos; i < ps->size - 1; i++){ps->a[i] = ps->a[i + 1];}ps->size--;
}//查找
int SLFind(SL* ps, SLDataType x)
{assert(ps);for (int i = 0; i < ps->size; ++i){if (ps->a[i] == x){//找到了return i;}}//没找到return -1;
}//修改
void SLModity(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos < ps->size);ps->a[pos] = x;
}//打印
void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; ++i){printf("%d ", ps->a[i]);}printf("\n");
}

3、Test.c

#define  _CRT_SECURE_NO_WARNINGS  1
#include"SeqList.h"void Test01()
{SL s1;SLInit(&s1);//尾插SLPushBack(&s1, 1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);SLPushBack(&s1, 5);SLPushBack(&s1, 6);SLPushBack(&s1, 7);SLPushBack(&s1, 8);SLPushBack(&s1, 9);SLPushBack(&s1, 10);SLPrint(&s1);
}void Test02()
{SL s1;SLInit(&s1);//头插SLPushFront(&s1, 1);SLPushFront(&s1, 2);SLPushFront(&s1, 3);SLPushFront(&s1, 4);SLPushFront(&s1, 5);SLPushFront(&s1, 6);SLPrint(&s1);//尾删SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);SLPopBack(&s1);SLPrint(&s1);
}void Test03()
{SL s1;SLInit(&s1);//尾插SLPushBack(&s1, 1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);SLPushBack(&s1, 5);SLPushBack(&s1, 6);SLPrint(&s1);//头删SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);SLPopFront(&s1);SLPrint(&s1);////再删一次,断言报错//SLPopFront(&s1);//SLPrint(&s1);
}void Test04()
{SL s1;SLInit(&s1);//尾插SLPushBack(&s1, 1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);SLPushBack(&s1, 5);SLPushBack(&s1, 6);SLPrint(&s1);//随机位置插入//测试查找int pos = SLFind(&s1, 1);SLInsert(&s1, 1, 15);SLPrint(&s1);
}void Test05()
{SL s1;SLInit(&s1);//尾插SLPushBack(&s1, 1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);SLPushBack(&s1, 5);SLPushBack(&s1, 6);SLPrint(&s1);//测试查找int pos = SLFind(&s1, 2);//随机位置删除SLErase(&s1, pos);SLPrint(&s1);
}void Test06()
{SL s1;SLInit(&s1);//尾插SLPushBack(&s1, 1);SLPushBack(&s1, 2);SLPushBack(&s1, 3);SLPushBack(&s1, 4);SLPushBack(&s1, 5);SLPushBack(&s1, 6);SLPrint(&s1);//测试查找int pos = SLFind(&s1, 2);//随机位置删除SLErase(&s1, pos);SLPrint(&s1);SLDestory(&s1);
}int main()
{//Test01();//Test02();//Test03();//Test04();//Test05();Test06();return 0;
}

4.2  内存池初始化实现

有uu说我写的数据结构解析和C++底层机制探讨很有启发性。如果说要分享一段比较有意义的代码,我想是下面这个内存池初始化实现体现了对资源生命周期的精细掌控——

class MemoryPool {
public:explicit MemoryPool(size_t block_size, size_t chunk_size = 1024): m_block_size(block_size), m_chunk_size(chunk_size), m_allocated_blocks(0){// 确保块大小对齐到指针边界m_block_size = (m_block_size + sizeof(void*) - 1) & ~(sizeof(void*) - 1);add_new_chunk();}void* allocate() {if (m_free_list == nullptr) {add_new_chunk();}void* block = m_free_list;m_free_list = *(void**)m_free_list;++m_allocated_blocks;return block;}void deallocate(void* block) {*(void**)block = m_free_list;m_free_list = block;--m_allocated_blocks;}private:void add_new_chunk() {void* new_chunk = ::operator new(m_block_size * m_chunk_size);for (size_t i = 0; i < m_chunk_size; ++i) {void* block = (char*)new_chunk + i * m_block_size;*(void**)block = m_free_list;m_free_list = block;}m_chunks.push_back(new_chunk);}size_t m_block_size;size_t m_chunk_size;size_t m_allocated_blocks;void* m_free_list = nullptr;std::vector<void*> m_chunks;
};

这段代码不仅体现了内存管理的效率追求,更包含了对异常安全、资源生命周期和接口设计的深度思考——这些都是通过不断写作与复盘积累的工程智慧!


五、憧憬

短期而言,我计划深入学习这三个方向——

(1)编程语言学习:继续深入学习C/C++;

(2)操作系统学习:系统学习Linux,学习Linux网络编程、Linux系统编程;

(3)数据库学习:系统学习MYSQL数据库的基础部分内容。

长远来看,我希望能构建一个开放的技术学习交流体系——就像牧群星于长空,让更多人能够接触并享受编程的乐趣。或许将来会开发一系列编程语言(如C++)、操作系统(如Linux)、MYSQL数据库、测试、QT等等内容从入门到精通的教程(当然还是以干货满满的技术文章的形式),用更系统、更易懂的方式传播技术知识。

更令我憧憬的是,建立一个技术写作社区,汇聚更多愿意分享的开发者,让知识如星河般流动不息。让更多愿意分享技术的IT领域的开发者参与到这个社区的建设当中。


结尾

“创作如驭天马巡游星海,每一个文字都是照亮夜空的星辰”。

艾莉丝在此感谢每一位支持艾莉丝创作的同行者,你们让这段旅程充满温暖与惊喜。

🌌最后,谨以我的座右铭与诸君共勉:效法羲和驭天马,志在长空牧群星!

http://www.xdnf.cn/news/19486.html

相关文章:

  • 企业级主流日志系统架构对比ELKK Stack -Grafana Stack
  • pyside6小项目:进制转换器
  • 【OpenFeign】基础使用
  • Kubernetes一网络组件概述
  • Java比较器
  • 如何在 vscode 上用 git 将项目 push 到远程仓库 and 常用Git 命令
  • 剧本杀小程序系统开发:重塑社交娱乐新生态
  • 【开题答辩全过程】以 基于Spring Boot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
  • 神经网络1——sklearn的简单实现
  • leetcode笔记
  • 20.29 QLoRA适配器实战:24GB显卡轻松微调650亿参数大模型
  • 堡垒机(跳板机)入门指南:构建更安全的多服务器运维架构
  • LINUX 91 SHELL:删除空文件夹 计数
  • HCIP-Datacom Core Technology V1.0_7 BGP基础
  • (纯新手教学)计算机视觉(opencv)实战十二——模板匹配(cv2.matchTemplate)
  • SpringAI模型评估
  • 刀片电池 vs 三元锂:家庭用车选谁更长寿?
  • 海康相机开发---HCNetSDK
  • 【2025ICCV】
  • SpringCloud-服务注册-服务发现
  • 35.序列(中)
  • 植物来源细胞外囊泡的脂质组学分析
  • 【项目思维】这是一份嵌入式软件开发的大纲(简化版)
  • LabVIEW自动抗乳化测试仪
  • 高效大规模创新3D重建模型iLRM
  • 进阶篇(上):大模型训练工作流(LoRA 微调实战)
  • 链表相关OJ题
  • 2025年AI智能体开源技术栈全面解析:从基础框架到垂直应用
  • RocksDB 在 macOS M 系列 上运行时报错的解决方案
  • 音视频面试题集锦第 36 期