数据结构与算法
文章平均质量分 84
lfeng_coding
bug制造机
展开
-
Josephus(约瑟夫环)问题
Josephus问题是说,一群小孩围成一圈,任意假定一个数m,从第一个小孩起,顺时针方向数,每数到第m个小孩时,该小孩便离开。小孩不断离开,圈子不断缩小。最后,剩下的一个小孩便是胜利者。题目要求:顺序打印离开的小孩及最后的胜利者。分析:为了解决这个问题,可以定义一个数组a,元素的个数就是小孩的个数。每个数组元素初始赋一个不为0的值作为小孩的序号,当小孩离开时,修改对应的数组元素的值原创 2015-08-08 10:44:47 · 2852 阅读 · 0 评论 -
直接选择排序算法和冒泡排序算法的介绍及实现
(1)直接选择排序(VS2013)直接选择排序是一种比较简单的排序方法,它的排序过程为:先从待排序的所有记录中选出关键字最小的记录,把它与原始序列中的第一个记录交换位置;然后再从去掉了关键字最小的记录的剩余记录中选出关键字最小的记录,把它与原始序列中第二个记录交换位置;以此类推,直至所有记录成为有序序列。实现代码如下:#include "stdafx.h"#includ原创 2015-08-08 10:07:05 · 618 阅读 · 0 评论 -
数据结构之二叉树的遍历
一、二叉树基础1)定义:有且仅有一个根结点,除根节点外,每个结点只有一个父结点,最多含有两个子节点,子节点有左右之分。2)存储结构 二叉树的存储结构可以采用顺序存储,也可以采用链式存储,其中链式存储更加灵活。 在链式存储结构中,与线性链表类似,二叉树的每个结点采用结构体表示,结构体包含三个域:数据域、左指针、右指针。二、二叉树的遍历原创 2015-08-17 00:00:36 · 595 阅读 · 0 评论 -
一元多项式相加的算法和C++实现
利用顺序表的链式存储实现一元多项式的加法原创 2015-08-13 15:53:08 · 18797 阅读 · 4 评论 -
链式队列的C++实现
链式队列的C++实现原创 2015-08-13 16:36:07 · 8342 阅读 · 9 评论 -
用C++实现单链表的创建、逆置和输出
实现创建一个节点可控的单链表,并逆置输出原创 2015-08-05 17:58:42 · 7880 阅读 · 1 评论 -
数据结构之树与二叉树(理论篇)
一、树树的定义:树是n(n>=0)个结点的有限集。对于任意一棵非空树:(1)有且仅有一个特定的结点称为根结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,T3···,Tm,其中每一个集合本身又是一棵树,并且称为根的子树。结点:树的结点包含一个数据元素及若干指向其子树的分支。度(degree):结点拥有的子树数称为结点的度。叶子(leaf):度为原创 2015-08-19 14:06:18 · 802 阅读 · 0 评论 -
数据结构之赫夫曼树的算法介绍和实现
一、基础知识:(1)最优二叉树(赫夫曼树)的介绍:a、路径长度:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上分支数目称做路径长度。b、树的路径长度:从树根到每一个结点之间的路径长度之和。上一篇介绍的完全二叉树就是这种路径长度最短的二叉树。c、带权路径长度:结点的带权路径长度为从该结点到树根之间的路径产度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带原创 2015-08-19 16:05:43 · 7328 阅读 · 1 评论 -
寻找一个二维数组鞍点的算法实现
题目:编写程序,找出一个二维数组中的鞍点(即该位置上的元素在该行上最大,在该列上最小)。一个二维数组最多有一个鞍点,也可能没有鞍点。分析:我们可以定义两个函数,一个为判断该元素是否是行最大元素,一个判断该元素是否是列最小元素;然后在main函数中采用嵌套for循环让每一个元素都调用这两个函数,以这两个函数的返回值作为判断条件,如果两个函数返回值的逻辑与为真,那么就可以说该元素为鞍点,否原创 2015-08-08 11:22:08 · 15374 阅读 · 0 评论