[置顶]关于博主

52coder.net是很早之前与同学一起脑洞的域名:中文名可以叫做-我爱程序员。我记得那年冬天孟非主持的非诚勿扰很火,我信誓旦旦的说以后要做一个网站,专门去为程序员解决个人问题,于是就有了现在的这个域名52coder.net。当时比较热衷于论坛,折腾过Discuz,在读书时折腾过,最多的时候同时在线人数超过1000,论坛的注册人数达到了2w左右,现在却早已忘记当初因为什么原因关闭论坛。

博客开始于2017年6月,希望博客用来记录自己的学习过程,渐渐通过几个月的时间喜欢上写点东西,目前学习的内容主要有C语言、数据结构、Linux系统编程、算法、LeetCode等,如果针对文章中的内容有任何疑......

快速排序

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。归并排序和快速排序一样均采用了分治法。

C语言实现:

来自算法导论的单向扫描算法,从左往右去扫描直到倒数第二个元素,出现小于最右边的元素则将小的那个元素与i标识的下标的元素交换,单向扫描法存在着冗余的元素交换,比如此时数组已有序1,2,3,4,5,6,单向扫描前5个元素均小于最后的元素6,那么每......

红黑树

昨天下班在地铁上居然听到有人在讨论红黑树,这块虽然一直在用,但早已忘了具体的实现细节,利用周天上午的时间,学习红黑树的知识。

以下红黑树的基本概念来自维基百科红黑树,详细介绍请阅读该文章。

另一篇非常不错的文章:红黑树的变色与旋转

可以拿来直接工程中使用的代码:libtree-github

红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。

红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

性质

1.......

二叉搜索树

二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;

若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;

任意节点的左、右子树也分别为二叉查找树;

没有键值相等的节点。

[编程珠玑]第一章:开篇

书中第一章给提出了一个如下排序问题:

输入:一个至多包含n个非负整数的文件,每个数都小于n; 且这些整数都不重复;数据之间也不存在关联关系。 此处n取值10000000。

约束:①最多1MB的内存空间可用;②磁盘空间充足;③运行时间最多几分钟, 最好是线性时间。

输出:按升序排列的整数序列。

位图排序

针对该题的特点,由于待排序的数据记录较多,如果使用常见的排序方法效率较低,而且内存空间有限(限制为1MB左右),不能一次性将数据如内存,需从文件中多次读入,该书引入了一种新的排序方法 ---位图法。

所谓位图法,就是使用一串二进制串来表示待排序列元素集合的方法。 比如,我们知......

贪心算法入门实例

在leetcode上刷题,学习了传说中的贪心算法,原理的话相对简单。在对动态规划有较深理解后再更新本文。

Leetcode中题目整理如下:

LeetCode C 实现 55. Jump Game

LeetCode C实现 455. Assign Cookies

动态规划入门实例

在leetcode上刷题,学习了传说中的动态规划,原理的话相对简单。可以参考如下链接,阅读之后可以对动态规划有个大概的认识。在对动态规划有较深理解后再更新本文。漫画趣谈:什么是动态规划

Leetcode中题目整理如下:

LeetCode C实现 70. Climbing Stairs

LeetCode C 实现198. House Robber

栈操作C语言实现

栈是一种限制线性列表,该类列表的添加和删除操作只能在一端实现,称为栈顶。栈的实现可以使用数组也可以使用链表来实现。

下面的C语言部分实现了顺序栈的基本操作,包括栈的初始化、入栈、出栈、获得栈顶元素的值等。

#include <stdio.h>

#include <stdbool.h>

/*定义栈的大小*/

#define maxsize 100

typedef int ElemType;

/*顺序栈的实现*/

typedef struct SqStack

{

ElemType data[maxsize];

int top;

}SqStack;

/*栈的初始化*......

程序员面试金典(三)C实现

题目描述

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <stdbool.h>

typedef int ElemType;

/*定义结构体*/

typedef struct LNode

{

struct LNode *next;

ElemType num;

}LNode;

/*链表初始化*/

void initList(LNode ** head)

{

i......

链表基本操作-C语言实现

目前已实现的基本操作包含:

链表初始化

求链表个数

链表插入

链表删除

销毁链表

打印链表

找出单链表中倒数第k个节点

删除单链表中第k个结点,限制条件只能访问第k个结点,不能删除第k个结点

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <stdbool.h>

typedef int ElemType;

/*定义结构体*/

typedef struct LNode

{

struct LNode *next;

ElemType num;......