![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构(java实现)
文章平均质量分 77
lurengu00
这个作者很懒,什么都没留下…
展开
-
各种排序算法(3)
7 堆排序将数组根据下标看成二叉树,写代码的过程中二叉树节点从1开始,数组节点从0开始,然后就被反复的切换搞死了。。。 其实用二叉树节点从0开始标记,根为i时,左子树为2i+1,右子树为2i+2,从子树寻找根时,(i-1)/2也能找到,这样就不用2套下标了。。。思路是首先生成大堆(根大于左子树和右子树),方法是一个循环A从最后一个根也就是下标为n/2的节点开始到第一个根(下标为0),分别与原创 2012-09-17 16:37:03 · 424 阅读 · 0 评论 -
图2----拓扑排序
拓扑排序,也就是AOV(activity on vertex),顶点的活动有先后执行顺序,用于有向无环图。基本思路是 1 找到无入度的点,然后去掉这个点和这个点的出度边。2 循环执行1直到再也找不到点3 如果点的个数等于顶点数则生成一个拓扑序列,如果小的话就是有环。邻接矩阵实现方法:用列下标循环,如果列没有访问过,则进入行下标循环,如果该列都为0,则表示该列表示原创 2012-09-22 20:22:04 · 579 阅读 · 0 评论 -
二叉树
1 递归写法:前序、中序、后序、90度旋转格式化打印二叉树用来熟悉递归算法与二叉树是怎么一回事,求叶子节点、求层数用来熟悉递归时候值传递(传递的值直接应用),值传递稍微有点不同的是用数组加空引用(比如String[] a = {"A","B","D",null,null,"E","G",null,null,null,"C","F"};)生成前序二叉树。2 BST:排序二叉树,左最小根其次右最大原创 2012-09-22 13:00:31 · 812 阅读 · 0 评论 -
图1---------------图的表示和遍历算法
图的表示方法:邻接矩阵法(太浪费空间,但确实把所有信息都表示了出来,计算度或者各种操作的话很方便,当然用无向图的对称性、只存放非0结点可以优化)邻接表(算比较好的一种方法,但是对于有向图计算入度必须遍历,用逆邻接表、十字链表优化)十字链表(和邻接表太类似)遍历算法:图是标准的多对多结构,因此不构成环并且不重复访问vertex需要一个标志数组visited,循环这原创 2012-09-18 13:57:33 · 796 阅读 · 0 评论 -
Stack实现
链表式:插入头部构造链表代码如下:package nuaa.ds;import java.util.NoSuchElementException;//插入头部的链表实现Stackpublic class LinkedStack { private Node top; private int size;//current size public void push(T原创 2012-09-17 19:56:39 · 468 阅读 · 0 评论 -
Queue实现
链表实现,插入节点放最后就行了。代码:package nuaa.ds;import java.util.NoSuchElementException;public class LinkedQueue { private Node head; private Node tail; private int size; public void enqueue(T t){原创 2012-09-17 20:34:26 · 851 阅读 · 0 评论 -
各种排序算法(4)
package nuaa.ds;public class Sort{ //插入排序 public void insertionSort(T[] t,Comparator c){ for(int i=1;i<t.length;i++){//确定有序序列 T temp = t[i];//空出位置 for(int j=i-1;j>=0;j--){//往前依次查找 if(c原创 2012-09-17 16:45:02 · 425 阅读 · 0 评论 -
各种排序算法(2)
5归并排序思路就是无限递归对半分一直到1,1可以看成排序好的(也无所谓排序),然后回退到上层时候排序好的左半部分和右半部分依次比大小拷贝到新申请的数组中,然后再用对应的的下标拷贝回原来的位置,复杂度为o(nlogn)。缺点就是空间复杂度为o(n),所以相比快速排序弱爆了。但在外部文件排序中貌似有应用。代码如下://归并排序 public void mergeSort(T[] t,Co原创 2012-09-17 16:12:39 · 452 阅读 · 0 评论 -
各种排序算法(1)
1 冒泡排序 冒泡排序的0(N2)的复杂度中,外层的循环表示有n个数要排,内层从0开始到n-1才是左右交换的实现,造个名字:相邻比较互换法。 代码如下://冒泡排序 public void bubbleSort(T[] t,Comparator c){ for(int i=0;i<t.length;i++){//有原创 2012-09-17 15:41:33 · 529 阅读 · 0 评论 -
图3--拓扑排序变体求重要路径
基本思路:最早发生时间是越早越好,但由于前面路径的消耗不得不晚,早了前面就还没有完成最晚发生时间是越晚越好,但由于后面路径的消耗不得不早,晚了后面的路径消耗来不及完成。初始化最早发生时间数组为0,找到排序的下一顶点,用该顶点去更新最早发生时间并入栈,方法是用自身的最早发生时间+路径代价,如果大于连接的下一顶点的最早发生时间就更新一下下一顶点的最早发生时间。一直做到最后一个顶点,最后原创 2012-09-23 18:32:14 · 697 阅读 · 0 评论