博客专栏  >  编程语言   >  数据结构原理与实现

数据结构原理与实现

讲述数据结构经典原理, 并使用C++语言将其全部实现, 同时也是剑指offer,STL源码剖析等经典的学习心得.

关注
31 已关注
24篇博文
  • 数据结构拾遗(3) --红黑树的设计与实现(下)

    完整源代码: http://download.csdn.net/detail/hanqing280441589/8450041 红黑节点设计与实现template class RedBlackNod...

    2015-02-17 10:39
    2053
  • 数据结构拾遗(2) --红黑树的设计与实现(中)

    Insert完善    根据规则4, 新增节点必须为红; 根据规则3, 新增节点之父节点必须为黑. 示例:    (1)插入16(红色)/55(红色), 则既不用旋转, 也不用重新染色    (2)插...

    2015-02-17 10:29
    1732
  • 数据结构拾遗(1) --红黑树的设计与实现(上)

    红黑树是一种自平衡的二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组(C++ STL 中的map/set)。它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉...

    2015-02-17 10:17
    2694
  • 数据结构基础(21) --DFS与BFS

    DFS    从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈). //使用邻接矩阵存储的无向图...

    2015-01-14 15:54
    2174
  • 数据结构基础(20) --图的存储结构

    图的结构定义    图是由一个顶点集 V 和一个弧集 E构成的数据结构。     Graph = (V , E )   其中,E = {| v,w∈V 且 P(v,w)} 表示从 v 到 w 的一条弧...

    2015-01-14 15:50
    1903
  • 数据结构基础(19) --堆与堆排序

    完全二叉树 首先让我们回顾一下完全二叉树的两个性质:  性质1:具有n个结点的完全二叉树的深度为[logn](向下取整)+1。  性质2:若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 ...

    2015-01-13 20:19
    2138
  • 数据结构基础(18) --哈希表的设计与实现

    哈希表    根据设定的哈希函数 H(key)和所选中的处理冲突的方法,将一组关键字映射到一个有限的、地址连续的地址集 (区间) 上,并以关键字在地址集中的“映像”作为相应记录在表中的存储位置,如此构...

    2015-01-13 20:10
    3512
  • 数据结构基础(17) --二叉查找树的设计与实现

    二叉排序树的特征二叉排序树或者是一棵空树,或者是具有如下特性的二叉树:    1.每一元素都有一个键值, 而且不允许重复;    2.若它的左子树不空,则左子树上所有结点的值均小于根结点的值;    ...

    2015-01-11 15:15
    2281
  • 数据结构基础(16) --树与二叉树

    树的基本术语 1.结点:{数据元素+若干指向子树的分支} 2.结点的度:分支的个数(子树的个数) 3.树的度:树中所有结点的度的最大值 4.叶子结点:度为零的结点 5.分支结点:度大于零的结点(包含根...

    2015-01-11 14:59
    2059
  • 数据结构基础(15) --基数排序

    基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法。实现多关键字排序通常有两种作法:   最低位优先法(LSD)    先对K[0]{基数的最低位}进行排序,并按 K(0) ...

    2015-01-11 10:57
    2330
  • 数据结构基础(14) --链式队列的设计与实现

    链式队列是基于单链表的一种存储表示, 其形状如下图所示:     (队列的队头指针指向单链表的第一个结点, 队尾指针指向单链表的最后一个结点, 注意没有无用的空[头/尾]节点)    用单链表表示的链...

    2015-01-10 20:37
    1958
  • 数据结构基础(13) --链式栈的设计与实现

    采用链式存储的栈成为链式栈(或简称链栈), 链栈的优点是便于多个栈共享存储空间和提高其效率, 且不存在栈满上溢的情况(因为链栈是靠指针链接到一起,只要内存够大, 则链栈理论上可以存储的元素是没有上限的...

    2015-01-06 19:38
    2209
  • 数据结构基础(12) --双向循环链表的设计与实现

    双向链表的操作特点:    (1) “查询” 和单链表相同;    (2)“插入” 和“删除”时需要同时修改两个方向上的指针。   但是对于双向循环链表则在表尾插入非常的迅速, 只需O(1)的时间,因...

    2015-01-06 19:19
    2337
  • 数据结构基础(11) --循环链表的设计与实现

    循环链表:最后一个结点的指针域的指针又指回第一个结点的链表;    循环单链表与单链表的区别在于:表中最有一个节点的指针不再是NULL, 而改为指向头结点(因此要对我们原来的MyList稍作修改), ...

    2015-01-05 20:50
    2135
  • 数据结构基础(10) --单链表迭代器的设计与实现

    为了向 STL 致敬(O(∩_∩)O~), 我们模仿STL中的list的迭代器, 我们也自己实现一个MyList的迭代器, 以供遍历整个链表的所有元素:首先:Node节点需要做如下修改(注意后缀有+的...

    2015-01-05 20:44
    2225
  • 数据结构基础(9) --单链表的设计与实现(2)之高级操作

    链表的链接:    将第二条链表的所有内容链接到第一条链表之后, 其完整实现代码与解析如下://链表的链接 template void MyList::concatenate(const MyLis...

    2015-01-05 20:35
    1945
  • 数据结构基础(8) --单链表的设计与实现(1)之基本操作

    链表简介数组的缺点:     1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N);    ...

    2015-01-05 20:31
    2404
  • 数据结构基础(7) --循环队列的设计与实现

    队列    队列简称队, 也是一种操作受限的线性表, 只允许在表的一端进行插入, 而在表的另一端进行删除.其特点为”先进先出(FIFO)”,故又称为先进先出的线性表,简单队列如图所示: 循环队列   ...

    2015-01-03 20:46
    2274
  • 数据结构基础(6) --顺序栈的设计与实现

    栈是一种只允许在一端进行插入或删除操作的线性表.其特点为:先进后出(FILO)/后进先出(LIFO); 栈 VS. 队列    栈和队列都是动态集合, 但在栈中, 可以去掉的是最近插入的那一个,:栈实...

    2015-01-03 20:07
    2348
  • 数据结构基础(5) --归并排序

    归并排序的基本思想:    将两个或两个以上的有序子序列”归并”为一个有序序列:假定待排序表含有n个记录, 则可以看成是n个有序的子表, 每个子表长度为1, 然后两两归并, 得到[n/2]个长度为2或...

    2015-01-03 19:50
    2202
img博客搬家
img撰写博客
img发布 Chat
img专家申请
img意见反馈
img返回顶部