数据结构
learn_sunzhuli
不积跬步,无以至千里
展开
-
访问二叉树
本文想要实现的操作有: (1)创建一颗二叉树; (2)前序、中序、后序分别访问已经创建的二叉树; (3)学习自定义数据类型,函数重载,引用型指针,指针的指针。原创 2015-04-17 22:06:32 · 566 阅读 · 0 评论 -
交换排序
交换排序的基本思想: 两两比较待排序元素,发现倒序则交换。交换排序包括: (1)冒泡排序 (2)快速排序算法由C++实现的代码如下,已经在 vs2010上测试通过。原创 2015-07-26 15:08:24 · 490 阅读 · 0 评论 -
Prim — 最小生成树
Prim算法,普里姆算法,在无向图中搜索最小生成树。算法实现的主要步骤: (1) 初始化 所有点都初始化为没有被访问,初始化根结点到各结点的距离,存放在lowcost[]数组中;(2)寻找最小值 从根结点开始,其依据:一端连接,另一端未连接,寻找最小值 找到最小值后,更新lowcost[],未选结点到已选结点(可能已经选中了多个结点)中的最小值(3)重复第(2)步,直到所有点都被选中。原创 2015-07-26 14:26:09 · 477 阅读 · 0 评论 -
选择排序
选择排序的基本操作: 在每一趟排序中,在待排序子表中选出关键字最小或者最大的元素放在其最终位置上。选择排序包括: (1)直接选择排序 (2)堆排序关于交换排序原创 2015-07-26 15:55:08 · 383 阅读 · 0 评论 -
哈希表查找 — 开放定址法
散列表(也叫哈希表),是根据关键字值而直接进行访问的数据结构。通过把关键字值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列函数的构造方法: (1)直接定址法 (2)除留余数法 (3)平方取中法 (4)折叠法 (5)数值分析法本文采用除留余数法构造散列函数。 H(K) = (H(k) + i) % m; 其中i = 1, 2, …原创 2015-07-26 17:07:04 · 4747 阅读 · 0 评论 -
哈希表查找 — 拉链法
散列表(也叫哈希表),是根据关键字值而直接进行访问的数据结构。本文采用除留余数法构造散列函数。 本文采用拉链法处理冲突。 根据原始数组建立一个哈希表,哈希表为一个链表(一定要区分数组和链表),且要求哈希表有固定大小。该方法将所有冲突的记录存储在一个链表中,并将这些链表的表头指针放在数组中。衡量一个查找算法的指标是平均查找长度,在有冲突发生的情况下,用拉链法处理冲突比用开放地址法处理冲突,其平均查找长度要小。原创 2015-07-26 17:33:06 · 7476 阅读 · 3 评论 -
排序和查找算法总结
一、排序算法总结 (1)插入排序:直接插入排序,希尔排序 (2)交换排序:冒泡排序,快速排序 (3)选择排序:直接选择排序,堆排序 (4)归并排序: (5)桶排序:原创 2015-07-26 15:20:55 · 862 阅读 · 0 评论 -
顺序表的查找
基本查找思想: 在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数,则查找结束。顺序表的查找可以分为两类: (1)简单顺序查找 对数据表的特性没有要求,但效率很低。 (2)二分查找(或者折半查找) 可以通过递归或者非递归方法去实现。 要求查找表已经按关键字递增(或递减)排序。原创 2015-07-26 16:36:14 · 703 阅读 · 0 评论 -
插入排序
插入排序的基本操作: 将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加1的有序数据, 算法适用于少量数据的排序。插入排序包括: (1)直接插入排序 (2)希尔排序原创 2015-07-26 15:00:42 · 390 阅读 · 0 评论 -
Dijkstra — 最短路径算法
Dijkstra算法,狄克斯特拉算法,在有向图中搜索最短路径。 算法实现的主要步骤: (1) 初始化 所有点都初始化为没有被访问,初始化根结点到各结点的距离,存放在lowcost[]数组中;(2)寻找最小值 从根结点开始,其依据:按照由近到远的次序求解 找到最小值后,更新lowcost[] (3)重复第(2)直到所有结点都选中,则算法结束。原创 2015-07-26 14:43:03 · 653 阅读 · 0 评论 -
实现顺序队列
队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列可以采用顺序存储方式来实现(称为顺序队列),或者采用链式存储方式来实现(称为链式队列)。实现顺序队列原创 2015-06-25 21:30:01 · 590 阅读 · 0 评论 -
实现顺序栈
栈作为一种数据结构,它按照后进先出的原则存储数据,只能在栈顶进行插入和删除操作的特殊线性表。按照存储方式不同,栈可以分为顺序栈和链式栈。实现顺序栈需要注意: (1)采用顺序存储方式; (2)需要预分配空间,data[maxlen]; (3)合理分配内存空间是个比较麻烦的事情。如果每个栈分配空间多,则会造成存储空间浪费;如果分配空间少,则会出现“溢出”。原创 2015-06-25 21:53:46 · 731 阅读 · 0 评论 -
实现链式队列
队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列可以采用顺序存储方式来实现(称为顺序队列),或者采用链式存储方式来实现(称为链式队列)。实现链式队列需要注意: (1)采用动态链表作为存储结构; (2)不需要预分配空间,比顺序队列更灵活; (3)没有链式队列满状态这种说法,因为没有定义最大内存空间;原创 2015-06-25 21:39:52 · 549 阅读 · 0 评论 -
实现链式栈
栈作为一种数据结构,它按照后进先出的原则存储数据,只能在栈顶进行插入和删除操作的特殊线性表。按照存储方式不同,栈可以分为顺序栈和链式栈。实现链式需要注意: (1)采用链表存储结构; (2)不需要预定义内存空间,不存在“链式栈满”这种情况; (3)解决了顺序栈中没有合理分配内存大小的难题。原创 2015-06-25 22:01:40 · 487 阅读 · 0 评论 -
归并排序和堆排序
归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。桶排序法,非常耗空间。规定数组中元素的最大值不超过数组的长度,否则要先求出数组元素的最大值后,才能指定空桶的个数,要求待排序数组中没有重复的元素。 但是,桶排序并不是 比较排序,不受时间复杂度 O(n log n) 下限的影响。原创 2015-07-26 16:07:55 · 453 阅读 · 0 评论