数据结构与算法
pgplayer_upc
google and stackoverflow is two of the best friends of programmer
展开
-
Stack&Queue
stack,queue原创 2015-11-18 21:02:43 · 386 阅读 · 0 评论 -
数据结构之希尔排序
package com.zhiru;/* * 希尔排序的思路就是: * 1.用一个间隔gap将待排序序列划分为gap个子序列。 * 2.所有距离为gap的元素放在同一个子序列中 * 3.对各个子序列进行直接插入排序。 * 4.然后缩小间隔gap[gap=(gap/3+1)] * 5.重复子序列划分和直接插入排序. * */public class ShellSort { p原创 2014-08-30 16:56:56 · 579 阅读 · 0 评论 -
数据结构之归并排序
package com.zhiru;/* * 归并排序在概念上较为简单 * 它的排序思路就是 * 将原序列不断的折半划分,直到划分为单个的元素。 * 然后将划分的序列归并。 */public class MergeSort { // merge函数就是用来归并a序列中有序的左子序列和右子序列, // 将它们归并到b中。 public static void merge(int原创 2014-08-30 16:54:20 · 534 阅读 · 0 评论 -
单链表反转
public Node reverse(){ Node pReverseHead=null; Node pNode=head;//当前结点开始为头结点 Node pPrev=null;//头结点的前一结点为空. while(pNode!=null){ Node pNext=pNode.next; if(pNext==null)//原来链表的尾结点就是反转链表的头结点.转载 2014-08-15 21:02:39 · 514 阅读 · 0 评论 -
数据结构之哈希表
package com.zhiru;/* * 哈希表 * 哈希表是一种直接计算元素存储地址的一种方法 * 它在关键码与存储位置之间直接建立的映像 * 处理冲突的方法中开散列法优于闭散列法 * 除留余数法做散列函数优于其他类型方法。 * */public class HashTable { private int divisor;// 除数[最接近表大小的质数],这个例子中原创 2014-08-29 20:05:24 · 505 阅读 · 0 评论 -
大数乘法
package com.zhiru;public class BigDataMutiply { public static void bigDataMutiply(String a, String b) { if (a != null && b != null) { int aLen = a.length(); int bLen = b.length(); int原创 2014-08-29 21:23:01 · 636 阅读 · 0 评论 -
数据结构之图【深搜,广搜】
package com.zhiru;import java.util.Queue;import java.util.LinkedList;public class MyGraph { private int maxVertices;// 最大顶点数 private int numVertices;// 当前顶点数 private int numEdges;// 当期边数 pri原创 2014-08-28 21:02:55 · 737 阅读 · 0 评论 -
Java实现全排列
public static void qpl(char[] a,int begin,int end){ if(begin==end-1){ for(int j=0;j System.out.print(a[j]); System.out.println(); } else{ for(int i=begin;i char tmp=a[i]原创 2014-04-22 08:47:45 · 785 阅读 · 0 评论 -
i++,++i的区别
i++ 是运算完毕,i在加1.++i是先进行加1,在参与运算。原创 2014-08-16 17:03:28 · 447 阅读 · 0 评论 -
数据结构之栈
栈是一种先进后出的线性结构,只允许在一端原创 2014-08-18 17:09:34 · 500 阅读 · 0 评论 -
数据结构之堆与栈的区别
1.栈由系统分配,而堆由转载 2014-08-18 20:58:18 · 634 阅读 · 0 评论 -
QuickSort
QuickSort原创 2015-11-11 19:48:40 · 357 阅读 · 0 评论 -
排序算法的时间复杂度与稳定性
排序算法的时间复杂度与稳定性l 冒泡排序O(n2),稳定l 选择排序O(n2),不稳定l 直接插入排序O(n2),稳定l 希尔排序无精确下界,不稳定。l 快排O(nlog2n),不稳定l 堆排序O(nlog2n),不稳定l 归并排序O(nlog2n),稳定l 桶排序桶排序的空间复杂度为O(N+M),时间复杂度:O(n)原创 2014-09-21 16:44:16 · 590 阅读 · 0 评论 -
数据结构之计数排序
package com.zhiru;/* * 计数排序稳定的排序算法 * 时间复杂度:O(n+k)[输入元素是0-k之间的整数的时候] * */public class CountingSort { public static int[] sort(int[] a, int[] b, int k) { int len=a.length; //数组c用来记录待排序数组a中值等原创 2014-09-04 17:05:13 · 680 阅读 · 0 评论 -
数据结构之桶排序
package com.zhiru;/* * 桶排序 * 思路:将读入数据序列放入不同的桶中, * 桶个数=数据中最大的数据+1; * 对每个桶进行排序【排序方法任意】 * 最后顺序输出各个桶中数据。 * 平均时间复杂度O(n*logn),最好时间复杂度O(n) * 空间复杂度O(N+M)N:代排序数据大小,M:桶个数. * 桶排序:用空间换时间. * 桶排序是稳定的排序算法。原创 2014-09-03 17:38:12 · 1529 阅读 · 0 评论 -
用两个栈实现队列
package com.zhiru;import java.util.Stack;/* * 用两个栈实现队列 */public class UseTwoStackConQueue { private Stack s1 = new Stack(); private Stack s2 = new Stack(); public void appendToTail(char c)原创 2014-09-16 16:50:51 · 519 阅读 · 0 评论 -
数据结构之快速排序
package com.zhiru;public class QuickSort { /* * 划分函数对快排是很重要的,在递归排序之前 * 进行划分,找出基准元素的位置【基准的初始值一般为第一个元素】。 */ public static int partition(int[]a,int low,int high) { int pivotVal=a[low]; int原创 2014-09-02 18:08:42 · 604 阅读 · 0 评论 -
数据结构之二分搜索
package com.zhiru;public class BSearch { /* * 折半搜索算法 时间复杂度:O(log2n) 思路是:选取有序序列中间元素【mid=(low+high)/2】作为开始对比对象 * 若待搜索元素值大于中间元素值,则low=mid+1[在右半区间] 若其值小于中间元素值,则high=mid-1[在左半区间] */ public static原创 2014-09-01 16:15:26 · 548 阅读 · 0 评论 -
java 实现线性表之顺序存储
package com.zhiru;public class MyArrayList { private int[]data; private int length; private int maxLength=100; MyArrayList(int size){ if(size<100){ length=0;原创 2014-08-16 16:58:59 · 504 阅读 · 0 评论 -
数据结构之最小堆
package com.zhiru;/* * 最小堆例子 * 优先级队列的各种实现中堆是最高效的一种 * 把一个关键码的集合按照完全二叉树的顺序存储在一个一维数组中, * 且满足:K[i]<=K[2i+1]&&K[i]<=K[2i+2](就是最小堆) * 即最小堆根节点上的值是最小的。 * 或者K[i]<=K[2i+1]&&K[i]<=K[2i+2](最大堆) */public原创 2014-08-27 16:17:01 · 749 阅读 · 0 评论 -
有关单链表的两个问题【遍历一次求中间节点,倒数第K个结点】
package com.zhiru;/* * 一个无附加头结点的单向链表示例 */public class LinkedList { private Node head; private Node cur; private int len;// 链表长度。 private class Node { public T val; public Node next; N原创 2014-09-10 19:22:57 · 914 阅读 · 0 评论 -
数据结构之冒泡排序和选择排序
public static void bubbleSort(int[] a) { int i, j; int len = a.length; // 外循环作用就是缩小每次内循环的长度。 // 内循环每次上浮一个最大元素到顶端,总共上浮n-1次,即可排好序。 for (i = 0; i < len - 1; i++) { // 内循环每次把当前序列中最大的元素上浮至顶端原创 2014-08-22 21:35:25 · 549 阅读 · 0 评论 -
数据结构之队列
package com.zhiru;/* * 队列 * 一种先进先出的数据结构 * 属于逻辑结构 * 下面的示例是基于数组的线性结构的队列 */public class MyQueue { private int maxSize; // 队头指针 private int front; // 队尾指针 private int rear; private int[] qu原创 2014-08-18 17:48:31 · 416 阅读 · 0 评论 -
插入排序
package com.zhiru;public class MySort {// 插入排序算法@SuppressWarnings("null")public static void sort(int[] a) {if (a != null || a.length > 0) {int len = a.length;// 乱序序列总长度for (int i原创 2014-08-18 15:35:03 · 494 阅读 · 0 评论 -
QucikSort
// qsort.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include void print(int data[],int n){ int i=0; for(;i printf("%d ",data[i]); printf("\n");原创 2014-06-13 16:17:02 · 555 阅读 · 0 评论 -
数据机构之优先级队列
package com.zhiru;/* * 优先级队列例子 * 基于数组实现 * ---------------------------- * 编号 1 2 3 4 5 * 优先权20 0 10 30 15//值小的优先权大 * 顺序 2 3 5 1 4 */public class PQueue原创 2014-08-19 16:32:04 · 691 阅读 · 0 评论 -
c++随机数生成
srand((unsigned)time(NULL)); //cout a[i][j] = rand() % 10;原创 2014-06-02 11:06:38 · 795 阅读 · 0 评论 -
斐波那契数列
// 斐波那契数列.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;long long Fobinacci(unsigned int n){//用递归的方式,容易理解,但是效率低下,时间复杂度以n的指数增长。 if (n return 0; if (n == 1)原创 2014-06-14 16:23:18 · 666 阅读 · 0 评论 -
统计输入的整数区间内回文数的个数
// 回文数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;bool isHuiWen(int num){ int temp; int sum = 0; temp = num; while (num) { sum = sum * 10 + num % 1原创 2014-06-03 20:08:10 · 2773 阅读 · 1 评论 -
反转字符串
public static void reverse(char[] a) { if (a != null) { int len = a.length; for (int i = 0; i < len / 2; i++) { a[i] ^= a[len - i - 1]; a[len - i - 1] = (char) (a[i] ^ a[len - i - 1]);转载 2014-08-22 21:37:55 · 506 阅读 · 0 评论 -
计算100以内的素数
素数:只能被自己和1整除的数。原创 2014-08-22 15:58:39 · 1344 阅读 · 0 评论 -
数据结构之二叉树创建与遍历
package com.zhiru;public class BinaryTree1 { private TreeNode root;// 根节点 private char refValue;// 输入停止标志值. public BinaryTree1() { root = null; } public BinaryTree1(char[] x, char[] y) {原创 2014-08-23 11:03:40 · 596 阅读 · 0 评论 -
数据结构之循环链表
package com.zhiru;/* * 循环链表例子 */public class CircularList { private LinkNode first, last;// 头尾指针. CircularList() { first = new LinkNode(); last = null; } CircularList(int d) { first原创 2014-08-26 19:52:37 · 500 阅读 · 0 评论 -
二叉树层次序遍历
//二叉树的层次序遍历 public void Level(TreeNode r){ //定义一个队列 MyQueue queue=new MyQueue(); queue.enQueue(r); while(!queue.isEmpty()){ TreeNode tmp=queue.getFront(); queue.deQueue(); System.out原创 2014-09-09 22:30:20 · 952 阅读 · 0 评论 -
大数相加
package com.zhiru;/* * 大数加法。 */public class BigDataAdd { public static boolean isDigit(String s) { int i = 0; boolean res = false; while (i < s.length()) { char x = s.charAt(i); if原创 2014-08-26 09:51:27 · 536 阅读 · 0 评论 -
数据结构之堆排序
package com.zhiru;/* * 堆排序 * 时间复杂度:O(n*log2n) * 空间复杂度:O(1) * 不稳定的排序算法 */public class HeapSort { private int[] heap; private int maxSize;// 堆的最大容量 private int currentSize;// 堆目前容量 private s原创 2014-09-01 17:35:36 · 614 阅读 · 0 评论 -
数据结构之二叉搜索树
package com.zhiru;import java.util.Random;/* * 二查搜索树 * 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节点的左、右子树也分别为二叉查找树。 没有键值相等的节点(no duplicate nodes)。 参考:维基百科二叉搜索树原创 2014-08-23 17:19:02 · 650 阅读 · 0 评论 -
数据结构之插入排序
package com.zhiru;public class MySort { // 插入排序算法 @SuppressWarnings("null") public static void sort(int[] a) { if (a != null || a.length > 0) { int len = a.length;// 乱序序列总长度 for (int i =原创 2014-08-22 21:30:10 · 475 阅读 · 0 评论 -
java_最小的k个数
package com.zhiru;/* * 求一个序列中最小的k个数 */public class TopK { private int[] heap; private int currentSize; TopK(int[] a) { if (a != null) { heap = new int[a.length]; currentSize = 0; f原创 2014-09-07 15:49:04 · 1347 阅读 · 0 评论 -
单链表从尾到头输出
void ReverseList(SingleList &L){//从尾到头输出单链表(剑指offer)int s[100];、int pos = 0;LinkNode *current = L.getHead()->link;while (current != NULL){s[pos++] = current->data;current = current->link原创 2014-06-03 16:09:16 · 712 阅读 · 0 评论