我的创作纪念日:一个特别的纪念日

一个特别的纪念日


💡一个热爱分享高性能服务器后台开发知识的博主,目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。技能涵盖了多个领域,包括C/C++、Linux、中间件、数据库、云原生、网络协议栈、分布式架构等。
👉
🎖️ CSDN实力新星、CSDN博客专家、华为云云享专家、阿里云专家博主
👉


今天收到CSDN的通知,不知不觉已经加入CSDN成为创作者5年啦。让我来写第一篇记录自己的创作之旅的文章吧。
在这里插入图片描述

机缘

2018年9月6日,那时候是一个刚毕业的小白,我一直对技术深感兴趣,认为它们能够改变世界,以及连接不同的文化和观点。怀着对技术的热爱,加入了CSDN,成为一位创作者,最开始的创作目的是为了记录学习、分享经验,在让自己变得更好的同时帮助他人;同时可以让更加优秀的人发现并指正自己的不足。

我一直热衷于学习新的事物,尤其是技术方面的知识。我希望将所学到的知识与他人分享,帮助他们解决问题,激发他们的创造力,这种愿望驱使我通过文章表达来传播我的经验和见解。

成为创作者的这五年,虽然中间出现过停更,但是基于对创作的热爱、对影响他人的渴望以及对知识分享的执着。这些初心一直激励着我坚持追随创作之路,不断成长和进步。

创作对我来说不仅是一种方式,更是一种生活的意义。它让我能够表达自己、成长、与他人互动,以及发现生活的美丽和深度。

  • 在不断地创作过程中,可以学到如何思考、如何观察、如何解决问题,以及如何不断提高自己的技能和才华。这种学习过程是持续的,让我能够不断进步,不断挑战自己,不断探索新的领域和可能性。
  • 创作提供了与他人互动和分享的机会。通过作品,能够与读者建立联系,传达经验。这种互动不仅能感到帮助的快乐,还可以理解其他人的观点。
  • 创作赋予了我的日常生活更多的色彩和深度,创作不仅是一种兴趣和爱好,更是一种生活方式,它激发了人的激情和动力。

在这里插入图片描述

收获

这五年的创作之旅也让我收获颇大。从最开始的创作小白成为了现在的博客专家
在这里插入图片描述
我不善于运维,也没有太多的时间去做这些,所以目前为止仅有四千多的读者关注,但我相信,创作的文章的影响不仅仅只有四千多,因为总的访问量高达37万+,而最近才上线的代码分享记录也达到了2000+。

此外,不得不说CSDN的电子勋章是非常好看的。
在这里插入图片描述
当然,实体的勋章和证书也少不了。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

日常

创作不仅是一种输出,还是一种输入。通过创作,我不断学习和研究各种主题。这不仅有助于在工作和学术领域中保持竞争力,还让我享受到不断学习的乐趣。现在创作基本成为了生活中的一部分,基本上每周都会写两篇文章,如果时间充裕,甚至是日更一篇。

目前对《C++从零开始到精通》专栏的更新接近了尾声,接下来的一段时间会更多的更新《Linux后台开发技术》专栏。但也会有其他的技术和经验分享。
在这里插入图片描述

成就

最好的一段代码太多了,贴一个最近的实践代码吧,红黑树的C语言实现:

#define KEY_TYPE    int

enum RB_COLOR{RED=0,BLACK};

#if 0
#define RBTREE_ENTRY(name,type)\
    struct name                         \
    {                                   \
        struct _rbtree_node*    left;   \
        struct _rbtree_node*    right;  \
        struct _rbtree_node*    parent; \
        unsigned char           color;  \
    }
    
#endif

typedef struct _rbtree_node
{
    /* data */
    KEY_TYPE                key;
    void*                   value;
    
    struct _rbtree_node*    left;   
    struct _rbtree_node*    right;  
    struct _rbtree_node*    parent; 
    unsigned char           color;  
#if 0
    RBTREE_ENTRY(,_rbtree_node) node;
    // RBTREE_ENTRY(,_rbtree_node) node2;
    // RBTREE_ENTRY(,_rbtree_node) node3;
#endif
    
}rbtree_node;

typedef struct _RedBlackTree
{
    /* data */
    rbtree_node *root;
    rbtree_node *nil;

}RedBlackTree;


static void rbtree_left_rotate(RedBlackTree *T,rbtree_node *x)
{
    rbtree_node *y = x->right;
    // 1
    x->right=y->left;
    if(y->left != T->nil)
        y->left->parent=x;

    // 2
    y->parent=x->parent;
    if(x->parent==T->nil)
        T->root=y;
    else if(x==x->parent->left)
        x->parent->left=y;
    else
        x->parent->right=y;

    // 3
    y->left=x;
    x->parent=y;
    
    
}

static void rbtree_right_rotate(RedBlackTree *T,rbtree_node *y)
{
    rbtree_node *x = y->left;
    // 1
    y->left=x->right;
    if(x->right != T->nil)
        x->right->parent=y;

    // 2
    x->parent=y->parent;
    if(y->parent==T->nil)
        T->root=x;
    else if(y==y->parent->right)
        y->parent->right=x;
    else
        y->parent->left=x;

    // 3
    x->right=y;
    y->parent=x;
    
    
}

void rbtree_insert_fixup(RedBlackTree *T,rbtree_node *z)
{
    // z->color == RED
    while(z->parent->color==RED)
    {
        if(z->parent==z->parent->parent->left)
        {
            // The parent of z is the left subtree of the grandfather
            rbtree_node *y=z->parent->parent->right;
            if(y->color==RED)
            {
                y->color=BLACK;
                z->parent->color=BLACK;
                z->parent->parent->color=RED;

                // You have to make sure Z is red every time you go through it.
                z=z->parent->parent;// z->color == RED
            }
            else
            {
                //This cannot be done in one step, it must be done in the middle:
                // The state with a large number of nodes on the left is easy to rotate.
                
                if(z->parent->right==z)
                {
                    z=z->parent;
                    rbtree_left_rotate(T,z);
                }

                // The number of nodes to the left of the root node is large
                // Especially if you have two red nodes bordering each other.
                // Need to rotate.
                
                // Change the color, and then rotate
                z->parent->color=BLACK;
                z->parent->parent->color=RED;
                rbtree_right_rotate(T,z->parent->parent);
                
            }

        }
        else
        {// The parent of z is the right subtree of the grandfather
            rbtree_node *y=z->parent->parent->left;
            if(y->color==RED)// Uncle node is red
            {
                z->parent->parent->color=RED;
                z->parent->color=BLACK;
                y->color=BLACK;

                z=z->parent->parent;// z->color == RED
            }
            else
            {
                if(z==z->parent->left)
                {
                    z=z->parent;
                    rbtree_right_rotate(T,z);
                }
                z->parent->color=BLACK;
                z->parent->parent->color=RED;
                rbtree_left_rotate(T,z->parent->parent);
            }

        }
    }
    T->root->color=BLACK;
}

void rbtree_insert(RedBlackTree *T,rbtree_node *z)
{
    rbtree_node* pre=T->nil;
    rbtree_node* cur=T->root;
    while(cur!=T->nil)
    {
        pre=cur;
        if(z->key>cur->key)
            cur=cur->right;
        else if(z->key<cur->key)
            cur=cur->left;
        else
            return;
    }
	
	z->parent=pre;
    if(pre==T->nil)
	{
        T->root=z;
	}
    else
    {
        if(pre->key>z->key)
            pre->left=z;
        else
            pre->right=z;
    }
	
    
    z->left=T->nil;
    z->right=T->nil;

    z->color=RED;
	rbtree_insert_fixup(T,z);
}

/**********************红黑树删除 start***************************/
rbtree_node *rbtree_mini(RedBlackTree *T, rbtree_node *x) {
	while (x->left != T->nil) {
		x = x->left;
	}
	return x;
}

rbtree_node *rbtree_maxi(RedBlackTree *T, rbtree_node *x) {
	while (x->right != T->nil) {
		x = x->right;
	}
	return x;
}

rbtree_node *rbtree_successor(RedBlackTree *T, rbtree_node *x)
{
	rbtree_node *y = x->parent;
	if (x->right != T->nil)
	{
		return rbtree_mini(T, x->right);
	}

	
	while ((y != T->nil) && (x == y->right)) {
		x = y;
		y = y->parent;
	}
	return y;
}
//调整
void rbtree_delete_fixup(RedBlackTree *T, rbtree_node *x) {

	while ((x != T->root) && (x->color == BLACK)) {
		if (x == x->parent->left) {

			rbtree_node *w = x->parent->right;
			if (w->color == RED) {
				w->color = BLACK;
				x->parent->color = RED;

				rbtree_left_rotate(T, x->parent);
				w = x->parent->right;
			}

			if ((w->left->color == BLACK) && (w->right->color == BLACK)) {
				w->color = RED;
				x = x->parent;
			}
			else {

				if (w->right->color == BLACK) {
					w->left->color = BLACK;
					w->color = RED;
					rbtree_right_rotate(T, w);
					w = x->parent->right;
				}

				w->color = x->parent->color;
				x->parent->color = BLACK;
				w->right->color = BLACK;
				rbtree_left_rotate(T, x->parent);

				x = T->root;
			}

		}
		else {

			rbtree_node *w = x->parent->left;
			if (w->color == RED) {
				w->color = BLACK;
				x->parent->color = RED;
				rbtree_right_rotate(T, x->parent);
				w = x->parent->left;
			}

			if ((w->left->color == BLACK) && (w->right->color == BLACK)) {
				w->color = RED;
				x = x->parent;
			}
			else {

				if (w->left->color == BLACK) {
					w->right->color = BLACK;
					w->color = RED;
					rbtree_left_rotate(T, w);
					w = x->parent->left;
				}

				w->color = x->parent->color;
				x->parent->color = BLACK;
				w->left->color = BLACK;
				rbtree_right_rotate(T, x->parent);

				x = T->root;
			}

		}
	}

	x->color = BLACK;
}

rbtree_node *rbtree_delete(RedBlackTree *T, rbtree_node *z) 
{
	rbtree_node *y = T->nil;
	rbtree_node *x = T->nil;

	if ((z->left == T->nil) || (z->right == T->nil))
	{
		y = z;
	}
	else
	{
		y=rbtree_successor(T, z);
	}

	if (y->left != T->nil)
		x = y->left;
	else if (y->right != T->nil)
		x = y->right;


	x->parent = y->parent;
	if (y->parent == T->nil)
		T->root = x;
	else if (y == y->parent->left)
		y->parent->left = x;
	else
		y->parent->right = x;


	if (y != z)
	{
		z->key = y->key;
		z->value = y->value;
	}
	// 调整
	if (y->color == BLACK) {
		rbtree_delete_fixup(T, x);
	}

	return y;
}

/**********************红黑树删除 end***************************/

/**********************红黑树查找 start***************************/
rbtree_node *rbtree_search(RedBlackTree *T, KEY_TYPE key) {

	rbtree_node *node = T->root;
	while (node != T->nil) {
		if (key < node->key) {
			node = node->left;
		}
		else if (key > node->key) {
			node = node->right;
		}
		else {
			return node;
		}
	}
	return T->nil;
}
/**********************红黑树查找 end***************************/

在这里插入图片描述

憧憬

目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。

  • 坚持每周至少两篇以上,把专栏好好整理一遍。
  • 运营好自己的博客,涨粉到万级,帮助更多的人,认识更多志同道合的有分享精神的朋友。
  • 推出技术视频,让分享更容易被理解。

在这里插入图片描述

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值