数据结构与算法
文章平均质量分 51
wxg6203
这个作者很懒,什么都没留下…
展开
-
java实现队列
队列其实 所指生活中排队的现象,去商场购物,付款时需要排队, 买饭时需要排队, 好多事情都是需要排队, 排在第一位的则先处理,结束后, 后面的人都像前移动一位,在开发中也有好多这样的事情需要处理,如文件的下载,短信的发送功能, 等这些都是需要队列方式实现。好了, 废话不多说, 详情见下面代码!package com.fanzhang;class Queue //队列类 ...2010-04-17 10:24:05 · 147 阅读 · 0 评论 -
基数排序
public class RadixSort { public static void main(String[] args) { int[] a = { 123, 963, 234, 546, 361, 798, 479, 310, 617, 892 }; Display(a, "Before sort:"); a = radixSort(a);...原创 2010-05-15 16:37:52 · 58 阅读 · 0 评论 -
如何建堆
今天来了解一下堆排序的问题,“堆”是个很有趣的结构。通常“堆”是通过数组来实现的,这样可以利用数组的特点快速定位指定索引的元素。而对“堆”的操作中定位某个元素简直就是家常便饭。为什么这么说呢,我们来看看“堆”的定义: 在起始索引为 0 的“堆”中: 1) 堆的根节点将存放在位置 0 2) 节点 i 的左子节点在位置 2 * i + 1 3) 节点 i 的右子节点在位置 2 * ...原创 2010-05-18 14:44:44 · 472 阅读 · 0 评论 -
朴素模式匹配算法
算法思想:从主串的的第一个字符起与模式串的第一个字符比较,若相等,则继续逐对字符进行后续的比较,否则主串从第二个字符起与模式串的第一个字符重新比较,直至模式串中的每个字符依次和主串中的一个连续的字符序列相等为止,此时称为匹配成功,否则匹配失败。public class test { /** * @param args */ public static void ma...2010-05-29 10:31:38 · 181 阅读 · 0 评论 -
KMP算法
[b]算法思想:[/b]一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为KMP算法。此算法可以在O (n+m)的时间数量级上完成串的模式匹配操作,其基本思想是:每当匹配过程中出现字符串比较不等时,不需回溯指针,而是利用已经得到的“部分匹配”结果将模式向右“滑动”尽可能远的一段距离,继续进行比较。package co...原创 2010-05-29 11:54:06 · 60 阅读 · 0 评论 -
线性表概述
[size=x-small]线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。[/size]在实际应用中,[b][color=red]线性表都是以栈、队列、字符串、数组等特殊线性表的形式...原创 2010-06-01 21:03:58 · 86 阅读 · 0 评论 -
线性表顺序存储与链式存储的比较
[color=brown][size=small]从时间的角度考虑,在按位置查找数据,或在查找元素的前驱和后继等方面,顺序存储有着较大的优势。在插入数据,删除数据时,链式存储就有较大优势,这是由于在链表中只要修改指针即可实现这些操作;而在顺序表中进行插入和删除,平均要移动表中将近一半的数据元素。从空间的角度考虑,顺序表的存储空间是静态分配的,在程序执行之前必须规定其存储规模。而动态链表的存...原创 2010-06-01 21:07:48 · 215 阅读 · 0 评论 -
广义表
[b]广义表是一种非线性的数据结构,顾名思义,它也是线性表的一种推广。[/b]它被广泛的应用于人工智能等领域的表处理语言LISP语言中。在LISP语言中,广义表是一种最基本的数据结构,就连LISP 语言的程序也表示为一系列的广义表。 线性表被定义为一个有限的序列(a1,a2,a3,…,an)其中ai被限定为是单个数据元素。广义表也是n个数据元素d1,d2,d3,…,dn的有限序列,...原创 2010-06-01 21:29:35 · 143 阅读 · 0 评论 -
树和二叉树
[b]树结构是一种非常重要的非线性结构,该结构中一个数据元素可以有2个或2个以上的直接后继元素。[/b]一、树的定义树是n(n >=0)个节点的有限集合,当n=0时称为空树。在任一非空树(n>0)中,有且仅有一个称为根的节点;其余节点可分为m(m>=0)个互相不相交的有限集合,其中每个Ti又都是一棵树,并且被称为根节点的子树。根 、双亲、孩子。二树的基本...原创 2010-06-01 21:42:13 · 59 阅读 · 0 评论 -
堆排序
package math;public class HeapSort1 { public static void main(String[] args) { int[] a = { 26, 5, 77, 1, 61, 11, 59, 15, 48, 19 }; Sort(a); } public static void Sort(int[] a) {...原创 2010-05-15 16:25:08 · 153 阅读 · 0 评论 -
归并排序
算法思想:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序...原创 2010-05-15 15:47:02 · 106 阅读 · 0 评论 -
用java程序编程2到100之间所有素数之和
public class PrimeNumber { public static void main (String arg[]) { int sum = 2; for (int i = 3; i < 100; i +=2) {if (isprime(i)) sum += i; }} public static boolean isprime(int n){...2010-04-17 10:29:07 · 1031 阅读 · 0 评论 -
JAVA算法大全
用Java语言实现的各种排序,包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。 选择排序:Java代码package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @aut...2010-04-17 10:33:39 · 243 阅读 · 0 评论 -
冒泡算法和改进算法
首先明确下冒泡排序的思想冒泡排序(BubbleSort)的基本概念是:[b]依次比较相邻的两个数,将小数放在前面,大数放在后面。[/b]即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数)...原创 2010-05-08 18:26:30 · 72 阅读 · 0 评论 -
插入排序
包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。算法思想:每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。插入排序算法思路(详细) 假定这个数组的序是排好的,然后从头往后,如果有数比当前外层元素的值大,则将这个数的位置往后挪,直到当前外层元素的值大于或等...原创 2010-05-13 10:09:59 · 56 阅读 · 0 评论 -
选择排序
基本思想: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。public class selectSort { /** * @param args */ pu...原创 2010-05-13 13:33:25 · 59 阅读 · 0 评论 -
快速排序
[b]基本思想[/b]快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。public class fasts...原创 2010-05-13 14:01:42 · 45 阅读 · 0 评论 -
交换排序
基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。public class changeSort { /** * @param args */ public static void main(String[] args) {...原创 2010-05-13 14:17:39 · 72 阅读 · 0 评论 -
希尔排序(改进型的直接插入排序)
算法思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2...原创 2010-05-15 10:18:18 · 106 阅读 · 0 评论 -
回文算法
public static boolean check(String str) { if (str.length() > 1) { if (str.charAt(0) != str.charAt(str.length() - 1)) { return false; } else { return check(str.substring(1, str.len...原创 2010-06-09 09:03:24 · 75 阅读 · 0 评论