随笔分类 -  Data Structure

摘要:1.栈的两个应用:括号匹配的检验和表达式求值2.字符串匹配算法3.树的基本概念4.二叉树先序、中序、后序遍历的递归算法和非递归算法5.堆的插入、删除和建立操作,堆排序6.哈希表7.循环队列基本操作8.二叉排序树的查找、插入和删除9.二叉平衡树的插入和删除操作10.图的存储结构11.链表插入排序、链表... 阅读全文
posted @ 2014-08-23 16:34 Andy Cheung 阅读(2363) 评论(0) 推荐(1) 编辑
摘要:1.基本概念2.时空复杂度3.稳定性4.使用情况分析排序算法总结(C语言版)已介绍排序算法的基本思想和C语言实现,本文只介绍时空复杂度和稳定性。1.基本概念时间复杂度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法的语句执行次数称为语句频度或时间... 阅读全文
posted @ 2014-08-22 11:47 Andy Cheung 阅读(3812) 评论(0) 推荐(0) 编辑
摘要:1.链表1.1链表的存储表示//链表的存储表示typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkList;1.2基本操作创建链表:/* * 创建链表。 * 形参num为链... 阅读全文
posted @ 2014-08-21 19:17 Andy Cheung 阅读(6754) 评论(3) 推荐(3) 编辑
摘要:1. 图2. 图的存储结构2.1 数组表示法(邻接矩阵表示法)2.2 邻接表2.3 十字链表2.4 邻接多重表1. 图顶点:图中的数据元素。V是顶点的有穷非空集合。弧:表示从v到w的一条弧,v为弧尾,w为弧头。VR是两个顶点关系的集合。无向图:若∈VR,必有∈VR,则此图为无向图。有向图:无上述关系... 阅读全文
posted @ 2014-08-19 22:42 Andy Cheung 阅读(10173) 评论(4) 推荐(4) 编辑
摘要:1. 二叉平衡树二叉排序树查找、插入和删除操作的时间复杂度和树的深度n有关。构建树时,当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长度为(n+1)/2,查找效率比较低。提高查找效率,关键在于最大限度地降低树的深度n。因此需要在构建二叉排序树的过程中进行“平衡化”处理,使之成为二叉... 阅读全文
posted @ 2014-08-16 22:43 Andy Cheung 阅读(13766) 评论(5) 推荐(7) 编辑
摘要:1. 二叉排序树二叉排序树(Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有结点值相同的结点。二... 阅读全文
posted @ 2014-08-14 11:15 Andy Cheung 阅读(15069) 评论(0) 推荐(1) 编辑
摘要:1. 基本概念在线性表、树等数据结构中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系。因此,当在结构中查找记录时必须进行一系列和关键字的比较。查找记录的效率取决于比较次数。理想的情况是给定一个关键字,不需要进行比较,立刻就能确定该记录在结构中的存储位置,然后一次存取就能得到所需... 阅读全文
posted @ 2014-08-12 17:58 Andy Cheung 阅读(1255) 评论(1) 推荐(0) 编辑
摘要:1. 堆堆:n个元素序列{k1,k2,...,ki,...,kn},当且仅当满足下列关系时称之为堆:(ki = k2i,ki >= k2i+1), (i = 1,2,3,4,...,n/2)若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树... 阅读全文
posted @ 2014-08-11 15:48 Andy Cheung 阅读(15749) 评论(0) 推荐(2) 编辑
摘要:先序遍历:若二叉树为空,则空操作;否则访问根节点;先序遍历左子树;先序遍历右子树。中序遍历:若二叉树为空,则空操作;否则中序遍历左子树;访问根节点;中序遍历右子树。后序遍历:若二叉树为空,则空操作;否则后序遍历左子树;后序遍历右子树;访问根节点。二叉链表:链表中的结点包含三个域:数据域和左右指针域。... 阅读全文
posted @ 2014-08-10 17:13 Andy Cheung 阅读(23252) 评论(7) 推荐(1) 编辑
摘要:1. 树根、子树、结点、孩子、双亲、兄弟、堂兄弟、祖先、子孙结点的度:结点拥有的子树数树的度:树内各结点度的最大值树的深度(高度):结点的最大层次叶子(终端结点):度为0的节点分支节点(非终端结点):度不为0的节点2. 二叉树特点:每个结点至多有两个子树,且子树有左右之分。性质1:二叉树的第i层上至... 阅读全文
posted @ 2014-08-10 15:21 Andy Cheung 阅读(710) 评论(0) 推荐(0) 编辑
摘要:1. 朴素的匹配算法(暴力匹配)寻找子串p在主串s中第pos个字符后的位置。分别利用计数指针i和j指示主串s和子串p中当前待比较的字符。算法的基本思想是:从主串s的第pos个字符起和模式的第一个字符比较,如果相等,继续逐个比较后续字符;否则从主串的下一个字符起,重新和模式的第一个字符比较。算法的时间... 阅读全文
posted @ 2014-08-08 21:32 Andy Cheung 阅读(1045) 评论(1) 推荐(0) 编辑
摘要:/* * 循环队列基本操作。 * 少用一个元素空间,约定以“队列头指针在队列尾指针的下一个位置”作为队列满的标志。 * “队列头指针等于队列尾指针”作为队列空的标志。 */#include #include #include #define MAXQSIZE 100typedef char Elem... 阅读全文
posted @ 2014-08-07 11:32 Andy Cheung 阅读(689) 评论(0) 推荐(0) 编辑
摘要:1. 括号匹配的检验假设表达式中含有3种括号:(),[],{},其嵌套的顺序随意。检验括号是否匹配。基本思想:在算法中设置一个栈,每读入一个括号,若是右括号,则或者与栈顶匹配的左括号相互消解,或者是不合法的情况;若是左括号,则直接压入栈中。若括号匹配,在算法的开始和结束时,栈都应该是空的。代码:/*... 阅读全文
posted @ 2014-08-06 22:40 Andy Cheung 阅读(7396) 评论(0) 推荐(0) 编辑
摘要:排序算法总结(C语言版)1. 插入排序1.1 直接插入排序1.2 Shell排序2. 交换排序2.1 冒泡排序2.2 快速排序3. 选择排序3.1 直接选择排序3.2 堆排序4. 归并排序4.1 二路归并排序4.2 自然合并排序5. 分布排序5.1 基数排序1.插入排序1.1 直接插入排序... 阅读全文
posted @ 2014-08-01 22:11 Andy Cheung 阅读(3216) 评论(2) 推荐(1) 编辑