【数据结构与算法】
ssdut_yrp
这个作者很懒,什么都没留下…
展开
-
程序员笔试面试题(1)
腾讯面试题:有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。原创 2014-04-05 21:15:26 · 868 阅读 · 0 评论 -
双向冒泡与奇偶冒泡
3.1 bubbleSort.java程序(清单3.1)和BubbleSort专题applet中,in索引变量都是从左到 右移动的,直到找到最大数据项并把它移动到右边的out变量外。修改bubbleSort()方法, 使它成为双向移动的。这样,in索引先像以前一样,将最大的数据项从左移到右,当它到 达out变量位置时,它掉头并把最小的数据项从右移到左。需要两个外部索引变量,一个在 右边(以前的out原创 2016-02-25 17:16:28 · 816 阅读 · 0 评论 -
循环链表
public class Link { public long lData; public Link next; public Link(long lData){ this.lData=lData; } public void displayLink(){ System.out.print(lData+" "); }}pu原创 2016-03-11 14:26:57 · 696 阅读 · 0 评论 -
循环链表实现队列
public class Link { public long lData; public Link next; public Link(long lData){ this.lData=lData; } public void displayLink(){ System.out.print(lData+" "); }}pu原创 2016-03-11 14:47:28 · 1354 阅读 · 0 评论 -
插入排序的思想解决几类问题
3.2在isertSort.java程序(清单3.3)中给ArrayIns类加一个median()方法.这个方法将返回 数组的中间值.(回忆一下,数组中一半数据项比中间值大,一半数据项比中间值小。) 3.3在insertSort.java程序(清单3.3)中增加一个名为noDups()的方法,这个方法从已经有 序的数组中删掉重复的数据项而不破坏有序性。(可以用insertionSort()方法对原创 2016-02-26 11:37:09 · 935 阅读 · 0 评论 -
Josephus问题
public class Link { public long lData; public Link next; public Link(long lData){ this.lData=lData; } public void displayLink(){ System.out.print(lData+" "); }}p原创 2016-03-11 15:19:07 · 740 阅读 · 0 评论 -
显示队列内容
4.1 为queue.java 程序(清单4.4)的Queue类中写一个方法,显示队列的 内容。注意这并不是要简单的显示出数组的内容。它要求按数据项插入的队 列的顺序,从第一个插入的数据项到最后一个插入的数据项显示出来。不要 输出因为在数组末端回绕而折成两半的样子。注意无论front和rear在什么位置上,都要正确显示出一个数据项和没有数据项的情况。public class Queue {原创 2016-02-29 10:15:31 · 1913 阅读 · 0 评论 -
双端队列
4.2 根据本章里对双端队列的讨论编写一个Deque类,它应该包括insertLeft()、insertRight()、removeLeft()、removeRight()、 isEmpty()、isFull()方法。要求像队列那样支持在数据末端的回绕。public class DuQueue { private int maxSize; private long[] queArr原创 2016-02-29 10:58:55 · 1058 阅读 · 1 评论 -
字符串逆转StringReverse
字符串逆转,将“I can fly”逆转为“fly can I” 思路:先将字符串整体逆转变成ylf nac I,然后以空格为分割符逆转空格左边的字符串即可。public class StringReverse { /** * @param args */ public void swap(char[] arr,int begin,int end){原创 2016-02-29 11:08:21 · 933 阅读 · 0 评论 -
双端队列实现栈
4.3 编写一个基于上机作业4.2的Deque类的栈类。这个栈类应该与 stack.java程序(清单4.1)中的StackX类具有机同的方法和功能。public class StackY { private DuQueue stackQueue; public StackY(int size){ stackQueue = new DuQueue(size);原创 2016-02-29 15:22:11 · 966 阅读 · 0 评论 -
递归求三角数字
package cn.gwssi;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class TriangleApp { /** * @param args */ static int theNumber;原创 2016-03-14 09:58:29 · 1088 阅读 · 0 评论 -
汉诺塔问题
对于上面把问题抽象出来的那段描述,对于n > 1的时候,又可以抽象(换成“总结”这个词会没那么大压力吗?)出这3步: (1)、将底盘n以上的环(n-1个)移动到B (2)、将底盘n从A移动到C (3)、将B上的环(n-1个)移动到C 其中第1步和第3步的步数是一样的,因为环的数量一样(n-1个),只是目标的柱子不同而已。public class TowerApp { /**原创 2016-03-14 11:05:19 · 1106 阅读 · 0 评论 -
非递归实现归并排序
归并算法的中心是归并两个已经有序的数组public class MergeApp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] arrayA={23,47,81,95};原创 2016-03-14 11:33:33 · 1200 阅读 · 0 评论 -
优先级队列
/** * 优先级队列 */public class PriorityQ { private int maxSize; private long[] queArray; private int nItems; public PriorityQ(int s){ maxSize =s; queArray=new long原创 2016-02-29 17:26:55 · 630 阅读 · 0 评论 -
队列Queue模拟排队问题
4.5 队列通用于模拟人、汽车、飞机、业务等等的流动情况。应用queue.java 程序(清单4.4)的Queue类,编写一个程序模拟超市的收款队列。可以用上机 作业4.1的display()方法,显示出顾客的几条队列。可以通过敲击一个键插入 一个新的顾客。为顾客选择在哪一个队列上。收银员为每个顾客服务的时间是 随机的(可假定为按照顾客买了多少东西而定)。一旦结完账,就从队列中删 除该顾客。为了简单原创 2016-03-01 10:15:22 · 8715 阅读 · 1 评论 -
希尔排序
public class ArraySh { private long[] theArray; private int nElems; public ArraySh(int max){ theArray=new long[max]; nElems=0; } public void insert(long value){原创 2016-03-15 14:05:23 · 1114 阅读 · 0 评论 -
划分算法
public class ArrayPar { private long[] theArray; private int nElems; public ArrayPar(int max){ theArray=new long[max]; nElems=0; } public void insert(long value){原创 2016-03-15 16:01:32 · 1390 阅读 · 0 评论 -
快速排序一
public class ArrayIns { private long[] theArray; private int nElems; public ArrayIns(int max){ theArray=new long[max]; nElems=0; } public void insert(long value){原创 2016-03-15 16:44:26 · 776 阅读 · 0 评论 -
二分查找、数组合并
2.4修改orderedArray.java程序(清单2.4)使insert()、delete()与find()方法一样都使用 二分查找,正如书中所建议的那样。 2.5向orderedArray.java程序(清单2.4)的OrdArray类加入一个merge()方法,使之可以将两个有序的源数组合并成一个有序的目的数组。在main()中添加代码,向两个源数组中插入随机数,调用merge()方法,原创 2016-02-25 16:18:11 · 949 阅读 · 0 评论 -
基于双向链表的双端队列
public class Link { public long dData; public Link next; public Link previous; public Link(long dData){ this.dData=dData; } public void displayLink(){ System.out.p原创 2016-03-10 16:32:07 · 978 阅读 · 0 评论 -
基于有序链表的优先级队例
public class Link { public long lData; public Link next;//reference to next Link public Link(long lData){ this.lData=lData; } public void displayLink(){ System.out.pr原创 2016-03-10 16:12:54 · 797 阅读 · 0 评论 -
排序(一)__综述
排序算法基本陈述容易理解,之后会详细解析希尔排序、堆排序、归并排序、快速排序、简单选择排序、直接插入排序等排序算法。原创 2014-06-30 20:50:42 · 775 阅读 · 0 评论 -
Stack栈的三种含义
理解stack栈的三种含义:数据结构、代码运行方式、内存区域原创 2014-07-23 10:37:53 · 1113 阅读 · 0 评论 -
排序(二)__冒泡排序、简单选择排序和直接插入排序
继《排序(一)__综述》后,对简单算法中的冒泡排序、简单选择排序和简单插入排序进行较为详细的解析。原创 2014-07-01 21:18:49 · 2026 阅读 · 0 评论 -
排序算法总结
一、pai原创 2014-05-28 20:04:44 · 1054 阅读 · 0 评论 -
每天进步一点点——形象化描述数据结构中基本概念
每天进步一点点——形象化描述数据结构中基本概念原创 2014-08-22 17:53:53 · 1254 阅读 · 0 评论 -
碎碎念--数据结构
1.图的广度优先搜索实现借助于队列结构;图的深度优先搜索除了递归方式外,还可借助堆栈、迭代方式实现。2.线性表的链式存储结构所需的存储空间一般要多于顺序存储结构。因为顺序存储结构只要存元素的内容,链式存储还需要多一块区域来存储相邻节点的地址。3.根结点的层数为0,根的孩子层数为1树的深度:结点层数最大值。树的高度:最大层数+14.树转换为原创 2014-08-28 18:11:47 · 865 阅读 · 0 评论 -
栈应用——单词逆序
public class StackX { private int maxSize; private long[] stackArray; private int top; public StackX(int s){ maxSize=s; stackArray = new long[maxSize]; top=-1;原创 2016-03-01 14:16:33 · 757 阅读 · 0 评论 -
栈应用——分隔符匹配
public class StackX { private int maxSize; private long[] stackArray; private int top; public StackX(int s){ maxSize=s; stackArray = new long[maxSize]; top=-1;原创 2016-03-03 10:53:43 · 533 阅读 · 0 评论 -
单链表
public class Link { public int iData;//data public double dData;//data public Link next;//reference to next Link public Link(int iData,double dData){ this.iData=iData; th原创 2016-03-03 14:47:01 · 522 阅读 · 0 评论 -
双端链表
public class Link { public long lData; public Link next;//reference to next Link public Link(long lData){ this.lData=lData; } public void displayLink1(){ System.out.原创 2016-03-03 15:03:55 · 499 阅读 · 0 评论 -
用链表实现栈
public class Link { public long lData; public Link next;//reference to next Link public Link(long lData){ this.lData=lData; } public void displayLink(){ System.out.pr原创 2016-03-03 15:50:08 · 592 阅读 · 0 评论 -
链表实现队列
public class Link { public long lData; public Link next;//reference to next Link public Link(long lData){ this.lData=lData; } public void displayLink(){ System.out.pr原创 2016-03-03 16:07:18 · 560 阅读 · 0 评论 -
有序链表
public class Link { public long lData; public Link next;//reference to next Link public Link(long lData){ this.lData=lData; } public void displayLink(){ System.out.pr原创 2016-03-03 17:31:51 · 594 阅读 · 0 评论 -
数字转换成中文汉字
public class NumberUtils { public NumberUtils(){ } public static final String[] UNITS={"","十","百","千","万","十","百","千","亿","十","百","千"}; public static final String[] NUMS = {"零","一","二",原创 2016-03-10 11:34:26 · 1099 阅读 · 0 评论 -
数组利用有序链表排序
public class Link { public long lData; public Link next;//reference to next Link public Link(long lData){ this.lData=lData; }}public class SortedList { private Link first;原创 2016-03-10 11:44:21 · 800 阅读 · 0 评论 -
数组元素删除与排序
2.1 向highArray.java程序(清单2.3)的HighArray类添加一个名为getMax()的方法,它返回 数组中最大关键字的值,当数组为空时返回-1。向main()中添加一些代码来使用这个方法。 可以假设所有关键字都是正数。 2.2 修改编程作业2.1中的方法,使之不仅返回最大的关键字,而且还将该关键字从数组中删除。 将这个方法命名为removeMax()。 2.3 编程作业原创 2016-02-25 14:40:45 · 1564 阅读 · 0 评论 -
双向链表
public class Link { public long dData; public Link next; public Link previous; public Link(long dData){ this.dData=dData; } public void displayLink(){ System.out.p原创 2016-03-10 15:43:10 · 556 阅读 · 0 评论 -
快速排序二
public class ArrayIns { private long[] theArray; private int nElems; public ArrayIns(int max){ theArray=new long[max]; nElems=0; } public void insert(long value){原创 2016-03-15 17:05:01 · 762 阅读 · 0 评论