C语言数据结构与算法
文章平均质量分 80
water_3700348
这个作者很懒,什么都没留下…
展开
-
C数据结构-线性表之顺序表
线性表之顺序表 顺序表使用C语言的原生数组作为存储结构,用户指定数组的大小,动态的申请堆空间。动态设计的好处比事先用宏定义规定大小更加灵活,而且支持顺序表的重置大小操作。使得使用顺序表的人拥有更大的灵活性,节省运行内存。下面是顺序表的设计。 #ifndef SEQLIST_H #define SEQLIST_H #ifndef NULL #define NULL 0 #endif /原创 2017-09-29 09:24:34 · 324 阅读 · 0 评论 -
C数据结构-线性表之单链表
线性表之单链表 单链表的设计之初,笔者在考虑一个首要的问题,就是单链表的节点是在插入的函数内部创建,还是在函数外部创建。考虑到用户在插入的时候,变量生命周期的不确定性以及容易造成内存泄漏等问题,综合考虑之下使用了内部创建节点的方式。笔者设计的单链表中包含了单链表的反转和合并等有趣的操作,其中的奥妙如果读者有兴趣可以细究。比如为什么笔者使用了二级指针来合并单链表,而不直接使用一级指针,比如为什么在原创 2017-09-29 17:07:22 · 617 阅读 · 0 评论 -
C数据结构-顺序栈
顺序栈 顺序栈的实现依赖于笔者之前实现的顺序表,详情请看《C数据结构-线性表之单链表》。 #ifndef SEQSTACK #define SEQSTACK #include "SeqList.h" typedef seq_list seq_stack; /** * 顺序栈初始化 * @param size 顺序栈的大小 * @return */ seq_stack原创 2017-10-09 14:52:36 · 514 阅读 · 0 评论 -
C数据结构-链栈
链栈 链栈的设计依赖于笔者之前设计的链表,详情请看《C数据结构-线性表之单链表 》。 #ifndef LINKEDSTACK_H #define LINKEDSTACK_H #include "LinkedList.h" typedef linked_list linked_stack; /** * 创建链表栈 * @return */ linked_stack *l原创 2017-10-09 16:03:18 · 252 阅读 · 0 评论 -
C数据结构-优化链表与链队
优化链表与链队 笔者上一个版本的链表,在尾部插入或删除的操作时,需要使用for循环挪动到尾部,这样时间复杂度就位O(n)。再用其来实现链队的话,那么链队的入队和出队的时间复杂度也会因此受限。如果在链表中加入一个指针,指向尾部元素。那么这个问题就可以迎刃而解。下面是优化过后的链表,和链队的代码。 #ifndef LINKEDLIST_H #define LINKEDLIST_原创 2017-10-10 11:54:56 · 398 阅读 · 0 评论 -
C数据结构-二叉搜索树BSTree
二叉搜索树BSTeee #ifndef BSTREE_H #define BSTREE_H #ifndef NULL #define NULL 0 #endif /* 元素类型 */ typedef int elem_t; /* 节点结构体 */ typedef struct tag_bstree_node { elem_t data; /原创 2017-10-11 16:16:15 · 840 阅读 · 0 评论 -
C数据结构-几种常见的排序:冒泡,选择,插入,希尔
几种常见的排序 实际开发中,我们最常见到最常使用的排序莫过于:冒泡排序、选择排序、插入排序和希尔排序。希尔排序其实就是一种特殊的插入排序。 #ifndef ALGORITHM_H #define ALGORITHM_H #define ARRAR_SIZEOF(a) ( sizeof((a)) / sizeof((a[0])) ) /** * 直接选择排序 * @par原创 2017-10-13 10:03:27 · 223 阅读 · 0 评论 -
C数据结构-优化顺序队列
优化顺序队列 如果直接复用之前的顺序表,那么在队列的入队和出队操作里,势必会有一个操作的时间复杂度是O(n),因为发生了数组元素的挪移操作。下面是优化后的顺序队列,其中使用了一个头位置和一个尾位置来循环的使用数组空间,以达到入队和出队的时间复杂度都是O(1)。 #ifndef OPTSEQQUEUE #define OPTSEQQUEUE #ifndef NULL #define N原创 2017-10-10 11:45:07 · 184 阅读 · 0 评论