
数据结构及算法
文章平均质量分 87
anialy
这个作者很懒,什么都没留下…
展开
-
C++ 实现几种排序
写几个常用的排序:1)冒泡排序2)选择排序3)插入排序4)归并排序5)快速排序6)希尔排序具体实现:1. 冒泡排序//冒泡排序//i: start -> end - 1//每一次两两比较array[i]与array[i+1],大的上浮,小下沉//比较次数来源于如果array[0]是最大值,则需要size - 1次才能放到正确的位置te原创 2012-05-29 20:30:35 · 9718 阅读 · 0 评论 -
Javascript实现链式栈
简述:链式栈,链接StackNode,完成Push,Pop,清空三个简单实用的操作。(因为弱类型识别,有点泛型的思想,链式节点的对象是任意的)但是封转方面没有做完善,都是public调用知识点:1. 链式栈的数据结构,只保留栈顶节点的引用2. javascript类型定义代码: //链式栈 var StackNode = functi原创 2012-07-11 22:48:23 · 985 阅读 · 0 评论 -
Javascript简单队列
简述:实现简单单向链式队列实现:front指向了队头节点rear 指向了队尾节点从front开始出队,直到front指向最后一个rear,即与rear相等,则说明到了最后一个队列元素了,若它出队,则队列为空了附:觉得这两个指针多余了,只要一个指向队头的指针,之后每一次出队,只要把这个队头指针向下移一位就可以了,如果next为空那么就都出队了,没必要再分别用fro原创 2012-07-12 00:08:57 · 3342 阅读 · 0 评论 -
图的 Prim算法和Dijkstra算法
用矩阵形式实现图的两个算法1) 无向图中,使用Prim算法,构建最小生成树2) 有向图中,使用DijKstra算法,得到单源最短路径首先构建一下图,这里是用矩阵实现的Graph类简述:numVertex 是图中当前的节点数numEdge 是图中当前的边数maxNumVertex 表示未自增长前的矩阵中节点最大值maxNumEdge 表示未自增原创 2012-05-26 21:13:36 · 6215 阅读 · 1 评论 -
Python试写简单的单链表
简述:用一下面向对象方法,用Python写一下链表代码:List.pyclass Node: next = None data = None def __init__(self,nodeData): self.data = nodeDataclass List: root = None size = 0; def __init__(self,ne原创 2012-06-29 21:59:16 · 8568 阅读 · 3 评论 -
Java排序string数组
简述:Java获取输入之后,存到list里 , 按照字符串快速排序(数字优先于含有非数字的字符串)知识点:1. 字符串读入,存取2. 快速排序3. List与Array数据结构的转换代码:package sort_string;import java.io.BufferedReader;import java.io.IOException;原创 2012-09-02 23:48:55 · 5210 阅读 · 0 评论 -
Java实现归并排序
简述:java实现归并排序知识点:1. 归并排序算法2. Compare 接口实现3. Java随机数代码:Comapre接口,CompareTwoObject.javapackage sort.algorithm;public interface CompareTwoObject { boolean Compare(Object原创 2012-09-10 18:54:07 · 2701 阅读 · 0 评论 -
C++有序双向链表
简述:试写有序的双向链表这个数据结构,包括几个操作如插入新数值,得到总结点数, 顺序,逆序遍历其中保证双向链表有序排列,且head永远指向最小的值知识点:1. 遍历的时候不只用value check, 还会用到address check2. C++ 生成随机数主要函数:1. 在双向链表插入新节点2. 计算双向链表中元素的总个数2. 删原创 2012-09-13 23:50:34 · 3385 阅读 · 0 评论 -
AVL Tree 平衡二叉树基本插入删除节点功能的实现
简述:实现AVL 树,主要是两个功能 : 插入某节点和删除某节点AVL Tree的定义,1. 是一棵二叉搜索树(故而每个节点是惟一的, 如果出现重复数字会破坏平衡树的算法)2. 每个节点左右子树的高度之差(平衡因子)相差最多为1实现:为了使所得的二叉树为平衡二叉树,首先在BSTNode中加了一个计算节点高度的方法getHeight(), 当两个节点高度相原创 2012-09-18 20:40:08 · 12794 阅读 · 9 评论 -
Java实现二叉树的多种遍历
简述:用Java实现二叉树的前序,中序,后序,层序遍历, S型层序遍历算法简述:前三个算法在于输出当前节点的位置,1 前序: 在递归左右儿子之前,输出当前节点 void PreOrderPrint(){ System.out.print(value.toString() + " "); if(left != null) left.PreOrderPri原创 2012-11-04 06:36:45 · 16667 阅读 · 0 评论 -
实现一个 链表 有序插入新节点
简述:用Java实现一个链表,每次插入后都会进行插入排序,找到合适的位置,维护有序性注意:在新加入节点newNode(E v)函数实现时,1)要判断,pHead是否为空,2)要先和第一个头结点比较,如果比头结点还小,就插在头结点前面,同时更改头结点指针,3)链表遍历的时候,一定不能忘记是用currentNode.next == null为结束条件的4)遍历另原创 2012-11-08 00:52:03 · 5305 阅读 · 0 评论 -
Javascript实现单链表简单操作
简述:试用传引用方法,实现链表增加,移除,查找操作。知识点:javascript的function实现了类的封装代码: var array = new Array(1,2,3,4,5,6); var Node = function(newData){ this.next = null; this.data = null; this.Init原创 2012-07-10 14:22:57 · 9209 阅读 · 0 评论 -
求解二叉树中节点的最大距离
简述:主要是一个节点深度递归回溯求算,GetDepth()其次就是分析可能出现节点间最大距离的情况,可能通过当前节点,又可能最大距离出现在当前节点的左右子树上用BinaryNode 类构件一棵二叉树分别建立两种情况下的树1)最大长度通过当前根节点P72) 最大长度是根节点p7的右子树BinaryNode类的实现 包括计算最长节点间距离原创 2012-06-14 21:45:26 · 1055 阅读 · 0 评论 -
n皇后问题
N皇后问题(n > 3):简述:这道题用到了回溯法,熟悉下递归回溯解决难点:1) 由于使用的是一维数组表示地图信息,所以用到了x = index % width 、y = index / width2) 在回溯过程中,保证回来的时候,地图信息要保留原先的状况,这里我用了两个数组saveLegal[] 和saveMap[]记录了加入n -1个皇后前的地图信息,在函数从n - 1个皇后原创 2012-06-02 13:50:29 · 826 阅读 · 0 评论 -
C++实现二叉树遍历
二叉树节点图:简述:分别使用前序遍历(LNR)、中序遍历(NLR)、后续遍历(LRN)实现数据输出代码及实现:/***********************二叉树遍历*********************/#include using namespace std;templateclass BSTree;templateclass Binar原创 2012-06-03 01:57:34 · 11364 阅读 · 0 评论 -
二叉节点及二叉树
二叉节点类BinaryNode和二叉树类BinaryTree 及实现:/***********************二叉节点及二叉树*********************/#include using namespace std;//类的前向声明,因为声明二叉树类是二叉节点类的友元类这样访问起来更加方便templateclass BinaryTree;/原创 2012-06-05 00:35:37 · 1015 阅读 · 0 评论 -
KMP算法 笔记
KMP算法简述:该算法是在一个主字符串里找到另一个字符串的非暴力破解算法。字符串s:abcabcabcd 模式t: abcabcd 暴力破解BF(Brute-Force)算法:每一次都将字符串t沿主字符串一位一位向右硬推,一旦发现有字符对应不同,则将第一个比较位右移一位重新比较。算法复杂度是(m * n), m、n分别是两个字符串的长度。Kmp算法:该算法记录了模式t中,的最长原创 2012-05-19 18:27:37 · 809 阅读 · 0 评论 -
二叉树转换成双向链表
简述:二叉排序树在不改变BinaryNode的 struct{data;*left;*right} 情况下是可以转换成双向链表的.由于二叉树的主要数据都记录在根节点BinaryNode* root 上的,所以这里就只用BinaryNode类手动建一棵树,树形如下:新增的有三个主要函数,BinaryNode* GetHead() 是用来查找右子树最小的那个节原创 2012-06-08 15:22:04 · 11756 阅读 · 2 评论 -
试写二叉最小堆和最大堆
简述:用一维数组实现二叉最小堆,确保每次根节点的值都是最小的,就是elements[1]的值是最小的。实现了最小堆 , 如下BinaryHeap类简述:BinaryHeap类考虑到泛型,所以用模板实现里面的主要函数包括AddAfter(Type newElement) //在数组末尾添加新的元素Change(Type element, int position)原创 2012-05-23 20:07:15 · 1189 阅读 · 0 评论 -
C++实现哈希表 HashMap冲突链式解决
简述:考虑到有大量数据的情况,所以使用Hash表使用泛型实现TypeA 是Key的类型,TypeB 是value的类型1. 主要函数1). TypeB Put(HashNode 函数用来加入一个新的MapNode2). TypeB Delete(const TypeA& key) 用来删除一个键值为key的节点3). TypeB GetValue(const原创 2012-05-31 16:50:56 · 8239 阅读 · 5 评论