
基本数据结构与算法
文章平均质量分 60
w告别的年代
这个作者很懒,什么都没留下…
展开
-
排序算法之快速排序
//快速排序入口 public void QuickSort(int[] lists) { MyQuickSort(lists, 0, lists.length-1); } /*递归调用该函数。原理:每次从数组从选一个标兵(本实现为简单起见直接选取给定范围内的第一个元素为标兵), 让后在给定范围内进行双向遍历,目的是以标兵为分界线,将所有小于标兵值的数字排一边,将所有大于标兵原创 2013-09-30 00:55:48 · 519 阅读 · 0 评论 -
数据结构之list(用数组实现)
由数组实现的list,相当于ArrayList,简单起见,未实现为泛型。public class MyArrayList { private int[] array; private int capacity; //容量 private int size; //实际填充的数值个数 private static final int DEFAULT_CAPACI原创 2013-09-30 02:00:42 · 909 阅读 · 0 评论 -
排序算法之冒泡排序
//冒泡排序,即通过相邻数字的比较将较大的数字往高处挤 public void PuppleSort(int[] lists) { boolean needSort=true; //检查是否有必要排序。如果数组已经是从小到大的顺序,则立刻返回 for(int i=0;i<lists.length&&needSort;i++){ needSort=false; for(i原创 2013-09-30 00:40:54 · 443 阅读 · 0 评论 -
排序算法之二叉查找树排序
//二叉查找树排序,原理:构造二叉查找树,用数组数据进行填充,然后每次删除二叉查找树之最小元素,返回的即是树中剩余元素中的最小值。 //该算法的局限是不能有重复元素的存在 //关于BinaryTree的构建,请参考本系列数据结构之二叉查找树 public void BinaryTreeSort(int[] lists) { BinaryTree tree=new BinaryT原创 2013-09-30 01:00:47 · 650 阅读 · 0 评论 -
数据结构之图(下)
图的实现public class Graph { private List nodes; //所有节点的集合 private Map> sides; //图的构成数据,每一个节点包含一个list,list里面是所有和该节点相邻的side public Graph(){ nodes=new ArrayList(); sides原创 2013-09-30 02:34:55 · 461 阅读 · 0 评论 -
数据结构之栈(用list实现)
栈(stack)这种数据结构用得相当那个广泛。用list实现相当方便。特点就是FILO(先进,后出)public class MyStack { private MyLinkedList lists; public MyStack(){ lists=new MyLinkedList(); } //将新元素压入栈中,位居栈顶 public void push(i原创 2013-09-30 02:09:31 · 656 阅读 · 0 评论 -
排序算法之归并排序
//归并排序入口 public void MegerSort(int[] lists) { MyMegerSort(lists); } //递归调用的函数,原理:每次将数组平分为两个数组,递归下去,当每个数组仅包含一个元素时候,再递归合并 private void MyMegerSort(int[] lists) { int length=lists.length原创 2013-09-30 00:46:42 · 484 阅读 · 0 评论 -
数据结构之二叉查找树
二叉查找树由节点构成,每个结构包含数值元素,左子树(指向左边相连的节点的指针),右子树(指向右边相连的节点的指针),父节点(指向父节点的指针)public class BinaryNode { private int data; private BinaryNode left=null; private BinaryNode right=null; private Bin原创 2013-09-30 01:24:48 · 580 阅读 · 0 评论 -
数据结构之list(用链表实现)
相当于LinkedList链表由节点构成。由于只实现单向链表,所里节点里面只有next指针,没有previous指针。public class MyNode { private int data; private MyNode next; public int getData() { return data; } public void setDa原创 2013-09-30 02:05:26 · 754 阅读 · 0 评论 -
排序算法值堆排序
堆排序的原理:用数组元素构建堆。每次调用堆的insert函数时,堆都会将堆中最大的元素调整到堆的头节点处。添加完毕,然后调用delete函数,每次删除和返回的都是当前堆中的最大数值。 public static void heapSort(int[] lists){ Heap heap=new Heap(); for(int i=0;i<lists.l原创 2013-09-30 01:40:51 · 475 阅读 · 0 评论 -
数据结构之堆
堆实际也是一种二叉数。特点是父节点的数值总是大于等于子节点的数值。堆可以用来实现堆排序,也可以用来实现优先队列。//堆实现为泛型类,实现类型必须实现Comparable接口public class Heap { private List data; //数据放在list里面 public Heap(){ data=new ArrayList(); } p原创 2013-09-30 01:35:11 · 421 阅读 · 0 评论 -
数据结构之优先队列
优先队列就是在队列的基础上增加优先级的比较。在操作系统进行进程/线程调度算法中即用到了优先队列。比如去医院看病,大家都要排队,但是如果病情非常严重的人肯定不需要排队了,可以直接救治,因为其优先级更高。优先队列用堆来实现非常方便。因为将元素添加到堆中以后,堆的头节点总是值最大的那个(按Comparable的compareTo方法进行比较),如果在实现类的comparaTo原创 2013-09-30 01:50:37 · 547 阅读 · 0 评论 -
数据结构之图(上)
图的用处也很广。搜索引擎的爬虫机器人在网上下载网页肯定用到了图这种数据结构,包括图的深度优先/广度优先算法,以及图中两个节点间的最短距离及最短路径(路线)。本实现简单实现了图的这三个算法。我这里用来表示图的数据结构包括节点和边(有向图,边含有权重)。节点的实现如下:public class Node { private String name;原创 2013-09-30 02:26:21 · 505 阅读 · 0 评论