
数据结构和算法
文章平均质量分 59
sjmnh1
这个作者很懒,什么都没留下…
展开
-
Java递归、非递归实现二叉树遍历
import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(cha转载 2014-04-09 21:48:55 · 570 阅读 · 0 评论 -
白话经典算法系列之七 堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总转载 2014-11-13 16:36:48 · 490 阅读 · 0 评论 -
堆排序及其分析
前言记得在学习数据结构的时候一味的想用代码实现算法,重视的是写出来的代码有一个正确的输入,然后有一个正确的输出,那么就很满足了。从网上看了许多的代码,看了之后貌似懂了,自己写完之后也正确了,但是不久之后就忘了,因为大脑在回忆的时候,只依稀记得代码中的部分,那么的模糊,根本不能再次写出正确的代码,也许在第一次写的时候是因为参考了别人的代码,看过之后大脑可以进行短暂的高清晰记忆,于是欺骗了我,以为转载 2014-11-13 16:42:25 · 437 阅读 · 0 评论 -
堆排序总结
一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2。堆排序方法对记录数较少的文件并不值得提倡,但对n较大的文件还是很有效的。因为其运行时间主要耗费在建初始堆和调整建新堆时进行的反复“筛选”上。堆排序在最坏的情况下,其时间复杂度也为O(nlogn原创 2014-11-13 16:51:05 · 742 阅读 · 0 评论 -
java 操作双向链表
java 操作双向链表最近在复习数据结构,看了链表的操作,但是书上是用C实现的,我本人用java实现了双向链表的操作,现在贴出代码与大家分享一下:package com.qgmobile.list;/** * 双向链表节点 * @author yangchuxi * */public class TwoWayNode { public Obje转载 2014-10-16 21:44:13 · 518 阅读 · 0 评论 -
java 单向链表的操作
java 单向链表的操作 今天复习了一下数据结构,参考了网上的一个例子,自己写了个单向链表的操作。以下附上代码供大家参考: /** * 链表节点 * @author yangchuxi * */public class Node { public Object t; public Node next; public Node(Objec转载 2014-10-16 21:48:59 · 512 阅读 · 0 评论 -
Java中的数据结构(2)----链表
单链表:Java代码 package com.wz.util; class Node { public T t; public Node next; Node(T t) { this.t = t; } public String toString(转载 2014-10-16 23:55:29 · 472 阅读 · 0 评论 -
Java中的数据结构(1)----栈和队列
马上要找工作了,数据结构貌似是笔试的必考题,所以要复习一遍。首先是栈--先进后出Java代码 package com.wz.util; public class Stack { private int MAX; private int top; private T []stack; Stac转载 2014-10-16 23:54:48 · 416 阅读 · 0 评论 -
Java中的数据结构(3)----强大的二叉树
简单的排序二叉树Java代码 package com.wz.util.tree; import java.util.ArrayList; import java.util.Iterator; /** * 排序二叉树 * * @author NumbCoder * */ // 节点 clas转载 2014-10-16 23:56:36 · 478 阅读 · 0 评论 -
Java中堆与栈的区别
Java中堆与栈的区别 栈与堆都是Java用来在RAM中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态转载 2014-10-16 21:50:22 · 415 阅读 · 0 评论 -
高效回文判断方法(java)
今天有幸看到几篇关于回文的文章,都是用不同语言编写的,有用递归算法的,也有用循环的,不过我觉得都不怎么高效。递归算法在参数传递过程中,由于采用的是java语言,会产生大量新对象,对内存不利。也有很多采用循环,不过设计有问题,速度不是很快,所有我就根据java语言的特征自己写了一个,仅供参考,请大家指点。 public boolean isPalindrome(char[] t转载 2014-10-20 10:10:47 · 606 阅读 · 0 评论 -
程序员编程艺术:第三章续、Top K算法问题的实现
程序员编程艺术:第三章续、Top K算法问题的实现 作者:July,zhouzhenren,yansha。 致谢:微软100题实现组,狂想曲创作组。 时间:2011年05月08日 微博:http://weibo.com/julyweibo 。 出处:http://blog.youkuaiyun.com/v_JULY_v 。 wiki:http转载 2014-11-13 18:38:55 · 660 阅读 · 0 评论 -
堆排序 Heap Sort
堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki 2i 且ki 2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整;转载 2014-11-13 16:50:11 · 733 阅读 · 1 评论 -
java栈实现括号匹配
算法思想:做一个空栈,读入字符。若字符是左运算符,则入栈若字符时右运算符,当栈为空时报错 否则,将栈顶元素弹出,若不匹配,则报错最后,字符读完后,栈非空,则报错 代码:Stack类Java代码 package cn.edu.tju.stack;转载 2014-10-07 22:10:07 · 661 阅读 · 0 评论 -
Java 字符串算术表达式求值
import java.util.ArrayList; import java.util.Stack; /** * * @author yhh * */ public class Calculate { /** * 将字符串转化成List * @param str * @re转载 2014-10-07 22:28:44 · 1315 阅读 · 0 评论 -
用map统计字符串中字符出现的次数
有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。import java.applet.Applet;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.ut转载 2014-10-27 14:37:27 · 874 阅读 · 0 评论 -
截取中文字符串(面试题)
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。首先要了解中文字符有多种编码及各种编码的特征。假设n为要截取的字节数。public class DismantleORsplit转载 2014-10-27 15:22:04 · 611 阅读 · 0 评论 -
java统计字符串中的字符重复的次数和和出现次数 实例(输入字符串)
import java.util.HashMap;import java.util.Scanner;import java.util.Map;import java.util.Set;import java.util.Iterator;public class Count { public static void main(String args[]) {转载 2014-10-28 08:09:44 · 5678 阅读 · 0 评论 -
查找一个字符串里,出现次数最多的字符,时间复杂度O(n)
package com.test.maxCharInString; /** *查找一个字符串里出现最多次数最多的字符 */ public class MaxCharInString { /** * @param args */ public static void main(String[] args)转载 2014-10-28 11:56:09 · 985 阅读 · 0 评论 -
java排序之快速排序
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n)。 另外 java没指针概念 可以认为是句柄 假设要排序的数组是A[转载 2014-10-27 14:18:14 · 420 阅读 · 0 评论 -
java排序之冒泡排序
public class BubbleSort{ public static void main(String[] args){ int score[] = {67, 69, 75, 87, 89, 90, 99, 100}; for (int i = 0; i for(int j = 0 ;j转载 2014-10-27 14:16:38 · 468 阅读 · 0 评论 -
Java 创建二叉树并遍历
public class BinaryTree { private Node root; /** * * 内部节点类 * @author yhh */ private class Node{ private Node left; p转载 2014-10-28 08:46:11 · 542 阅读 · 0 评论 -
通过线程按照顺序循环输出ABC n次
通过线程按照顺序循环输出ABC n次根据题目的意思应该是每个线程输出一个字符,按照顺序输出n次。对于这个题目应该是3个线程。分析:线程的执行方式是乱序的,需要通过协作才能实现3个线程顺序输出字符。在jdk1.4中线程的协作是通过wait/notify/notifyAll实现的,使用这3个方法要求获取同步对象的monitor,否则即使编译成功也会在运行的时候出现 Il转载 2014-12-09 23:33:15 · 848 阅读 · 0 评论