数据结构与算法
文章平均质量分 87
写了程序换酒钱
Want to be a geek!!!
展开
-
哈夫曼树
哈夫曼树(Huffman tree)也称最优二叉树。每个叶子节点都有一个权值,就是一个有意义的数据值,一般取正整数。 一个二叉树具有N个带权值的叶子节点,从根节点到各个子节点的路径长度和相应权值的的乘积之和就做二叉树的带权路径长度。 WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln) 带权路径长度最小的称为哈夫曼树。 算法描述如下(1)初始化:给定的n个权值{W原创 2013-04-18 14:43:17 · 2770 阅读 · 0 评论 -
冒泡排序
冒泡排序是基础的入门算法。它每次ji原创 2014-05-30 09:39:19 · 996 阅读 · 0 评论 -
图-公交查询问题乱弹(三)
公交线路基本都是双向的,在我们以前的那个图中两个站点之间应该是这么画的,如下:,双向的有向图,就可以用无向图代替,因为无向图节点之间是可以双向的到达的,所以在前面的我们介绍的可以用链接形式来表示图的方法,在每个站点中不经要保存从左往右的顺序的下个节点,还应该记住它到上个的节点的线路和节点。如果我们将每条线路都拉成直线,每条线的第N个的站点排成第N列。如下所示,只是举个例子与以前的图没关系原创 2013-05-28 22:30:56 · 1320 阅读 · 0 评论 -
图-公交查询问题乱弹(一)
下面这图是本人乱涂鸦的只有3条线路的公交路线图 <!--p {margin-bottom:0.21cm}-->一号线 A-B-E-D-K二号线F-B-C-D-K-J三号线H-I-E-J-K-D保存这个数据结构使用图的变形很合适首先是一个所有路线的集合,一个元素包含两个标识,路线和第一个原创 2013-05-26 15:18:05 · 984 阅读 · 0 评论 -
图-公交查询问题乱弹(二)
还是先上昨天鬼画符的图,有点改变 今天来谈谈两个站点之间的路线查找问题。假设一个情景,你现在在站点A,你现在想去站点J。你输入了两个站点的A->J,然后我们的系统开始工作。站点J在线路2和3上,而我现在在线路1和4上,我该乘那辆车啊?在这本人引入了一个概念,叫做线路相关联度。我是这样来表示的(1,4)->1(个站点),(2,4)->1(个原创 2013-05-27 12:24:28 · 883 阅读 · 0 评论 -
平衡二叉树
二叉树的查找,插入和删除操作的时间与树的高度有关,如果树尽量的矮胖,那么时间就短,那就要是满二叉树,或者说满N叉树,对于一颗M个节点的满N叉树时间复杂度为,但是维护满叉树,难度是很大的。所以AVL树(平衡树)放宽了条件,允许左右子树的高度差在一定的范围之内,avl树平衡条件是左右子树高度相差不能为2,而不是满叉树左右子树高度相同。AVL是以提出它的两位苏联数学家的名字头字母命名的。一棵N个节点的A原创 2013-05-24 18:24:16 · 1077 阅读 · 0 评论 -
栈的顺序实现和链接实现
#ifndef STACK_HPP#define STACK_HPP#include #include "exceptions.hpp"template /** * @brief The Stack class 栈基类 */class Stack{public: Stack() {} virtual ~Stack(){} /** * @br原创 2013-05-09 12:30:06 · 1040 阅读 · 0 评论 -
队列的顺序和链接
链接借助前面的双循环链表实现 #ifndef QUEUE_HPP#define QUEUE_HPP#include #include "exceptions.hpp"template class Queue{public: Queue(){} virtual ~Queue() {} /** * @brief原创 2013-05-09 22:45:24 · 941 阅读 · 0 评论 -
线性表链接实现--双循环链表
在实现时没有引入两个辅助节点,所以实现时需要考虑特殊情况,比如头和尾插入删除操作时,需要改变指向头和尾的指针。在做迭代器的时候还有麻烦,遍历链表时需要借助量表的长度,不然不能标识结束,我想到的办法是在迭代器中做一些记录工作,比如当前的下标和整个链表的长度。有解决办法的希望指教。 #ifndef LINKLIST_H#define LINKLIST_H原创 2013-05-07 22:47:53 · 1057 阅读 · 0 评论 -
二叉树
/**************************************************author:周翔*e-mail:604487178@qq.com*blog:http://blog.csdn.net/zhx6044***************************************************/#include "linkQueue.h原创 2013-05-16 23:33:12 · 998 阅读 · 0 评论 -
二叉搜索树
二叉搜索树也是二叉树,不过多了一些限定,根节点值大于左子树小于右子树,子树递归定义。 /**************************************************author:周翔*e-mail:604487178@qq.com*blog:http://blog.csdn.net/zhx6044***********原创 2013-05-19 18:52:40 · 955 阅读 · 0 评论 -
顺序实现线性表--顺序表
#ifndef EXCEPTIONS_H#define EXCEPTIONS_H#include #include /** * @brief The OutOfBoundary class 越界异常 */class OutOfBoundary : public std::exception{ friend std::ostream& operator << (std::原创 2013-05-06 12:08:26 · 853 阅读 · 0 评论 -
优先级队列
/**************************************************author:周翔*e-mail:604487178@qq.com*blog:http://blog.csdn.net/zhx6044***************************************************/#ifndef PRIORITYQUEUE原创 2013-05-18 20:09:54 · 870 阅读 · 0 评论 -
栈和二叉树的使用--四则运算
使用栈来检测表达式括号的匹配,使用二叉树来保存运算的中缀表达式,对表达式树进行后序遍历得到后缀表达式,运算得到表达式的值。 检测配对使用栈保存‘(’符号,当遇到一个‘)’,出栈,若栈空则出错,表达式结束,栈非空也出错。 <!--p {margin-bottom:原创 2013-05-13 21:41:16 · 5609 阅读 · 0 评论 -
插入排序
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元原创 2014-05-31 21:25:51 · 803 阅读 · 0 评论