Java实例-数据结构

1、Java 实例 – 数字求和运算:使用do...while结构求0~100的整数数字之和

public class DateStr_Sum {

public DateStr_Sum() {

int limit=100;

int sum=0;

int i=1;

do {

sum=sum+i;

i++;

}while(i<=limit);

System.out.println("0~100的整数数字之和:"+sum);

}

}

运行结果:

2、Java 实例 – 利用堆栈将中缀表达式转换成后缀:

public class Stack {

private int maxSize;

private char[]stackArray;

private int top;

public Stack(int max) {

maxSize = max;

stackArray =new char[maxSize];

top = -1;

}

public void push(char j) {

stackArray[++top] = j;

}

public char pop() {

return stackArray[top--];

}

public char peek() {

return stackArray[top];

}

public boolean isEmpty() {

return (top == -1);

}

}

·····························································································

public class DateStr_StackTransform {

private StacktheStack;

private Stringinput;

private Stringoutput ="";

public DateStr_StackTransform(String in) {

input = in;

int stackSize =input.length();

theStack =new Stack(stackSize);

}

public String doTrans() {

for (int j =0; j

char ch =input.charAt(j);

switch (ch) {

case '+':

case '-':

gotOper(ch,1);

break;

case '*':

case '/':

gotOper(ch,2);

break;

case '(':

theStack.push(ch);

break;

case ')':

gotParen(ch);

break;

default:

output =output + ch;

break;

}

}

while (!theStack.isEmpty()) {

output =output +theStack.pop();

}

//System.out.println(output);

        return output;

}

public void gotOper(char opThis,int prec1) {

while (!theStack.isEmpty()) {

char opTop =theStack.pop();

if (opTop =='(') {

theStack.push(opTop);

break;

}

else {

int prec2;

if (opTop =='+' || opTop =='-')

prec2 =1;

else

                    prec2 =2;

if (prec2 < prec1) {

theStack.push(opTop);

break;

}

else

                    output =output + opTop;

}

}

theStack.push(opThis);

}

public void gotParen(char ch){

while (!theStack.isEmpty()) {

char chx =theStack.pop();

if (chx =='(')

break;

else

                output =output + chx;

}

}

public static void main(String[] args)

throws IOException {

String input ="1+2*4/5-7+3/6";

String output;

DateStr_StackTransform theTrans =new DateStr_StackTransform(input);

output = theTrans.doTrans();

System.out.println("中缀式:"+input);

System.out.println("后缀式:" + output +'\n');

}

}

运行结果:

3、Java 实例 – 在链表(LinkedList)的开头和结尾添加元素:使用 LinkedList 类的 addFirst() 和 addLast() 方法在链表的开头和结尾添加元素。

public class DateStr_LinklistAdd {

public DateStr_LinklistAdd() {

LinkedList lList =new LinkedList();

lList.add("1");

lList.add("2");

lList.add("3");

lList.add("4");

lList.add("5");

System.out.println("原链表:"+lList);

lList.addFirst("0");

System.out.println("头部添加:"+lList);

lList.addLast("6");

System.out.println("尾部添加:"+lList);

}

}

运行结果:

4、Java 实例 – 获取链表(LinkedList)的第一个和最后一个元素:使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlistname.getLast() 来获取链表的第一个和最后一个元素。

public class DateStr_LinklistGet {

public DateStr_LinklistGet() {

LinkedList lList =new LinkedList();

lList.add("100");

lList.add("200");

lList.add("300");

lList.add("400");

lList.add("500");

System.out.println("链表元素有:"+lList);

System.out.println("链表的第一个元素是:" + lList.getFirst());

System.out.println("链表的最后一个元素是:" + lList.getLast());

}

}

运行结果:

5、Java 实例 – 删除链表中的元素:使用 clear() 方法来删除链表中的元素。

public class DateStr_LinklistDelete {

public DateStr_LinklistDelete() {

LinkedList lList =new LinkedList();

lList.add("1");

lList.add("8");

lList.add("6");

lList.add("4");

lList.add("5");

System.out.println("原链表:"+lList);

lList.subList(2,4).clear();//2之后是起始删除位置,4是结束位置

        System.out.println("删除后链表:"+lList);

}

}

运行结果:

6、Java 实例 – 获取链表的元素:使用 top() 和 pop() 方法来获取链表的元素。

public class DateStr_LinklistLookup {

public DateStr_LinklistLookup() {

for (int i =30; i <40; i++)

push(new Integer(i));

System.out.print(top()+"  ");

System.out.print(pop()+"  ");

System.out.print(pop()+"  ");

System.out.println(pop());

}

private LinkedListlist =new LinkedList();

public void push(Object v) {

list.addFirst(v);

}

public Object top() {

return list.getFirst();

}

public Object pop() {

return list.removeFirst();

}

}

运行结果:

7、Java 实例 – 获取向量元素的索引值:使用 Collections 类的 sort() 方法对向量进行排序并使用 binarySearch() 方法来获取向量元素的索引值。

public class DateStr_VectorKey {

public DateStr_VectorKey() {

Vector v =new Vector();

v.add("X");

v.add("M");

v.add("D");

v.add("A");

v.add("O");

Collections.sort(v);

System.out.println("向量中的元素有:"+v);

int index = Collections.binarySearch(v,"D");

System.out.println("元素D的索引值为 : " + index);

}

}

运行结果:

8、Java 实例 – 栈的实现:通过创建用于插入元素的自定义函数 push() 方法和用于弹出元素的 pop() 方法来实现栈。

public class DateStr_Stack {

private int maxSize;

private char[]stackArray;

private int top;

public DateStr_Stack(int max) {

maxSize = max;

stackArray =new char[maxSize];

top = -1;

push('1');

push('2');

push('3');

push('4');

push('5');

System.out.println("栈元素有:");

while (!isEmpty()) {

long value = pop();

System.out.print(value);

System.out.print(" ");

}

System.out.println("");

}

public void push(char j) {

stackArray[++top] = j;

}

public char pop() {

return stackArray[top--];

}

public char peek() {

return stackArray[top];

}

public boolean isEmpty() {

return (top == -1);

}

}

运行结果:

9、Java 实例 – 链表元素查找:使用 linkedlistname.indexof(element) 和 linkedlistname.Lastindexof(elementname) 方法在链表中获取元素第一次和最后一次出现的位置。

public class DateStr_LinklistFind {

public DateStr_LinklistFind() {

LinkedList lList =new LinkedList();

lList.add("1");

lList.add("2");

lList.add("3");

lList.add("4");

lList.add("5");

lList.add("2");

System.out.println("链表元素有:"+lList);

System.out.println("元素 2 第一次出现的位置:" + lList.indexOf("2"));

System.out.println("元素 2 最后一次出现的位置:"+ lList.lastIndexOf("2"));

}

}

运行结果:

10、Java 实例 – 压栈出栈的方法实现字符串反转:使用用户自定义的方法 StringReverserThroughStack() 来实现字符串反转。

public class Stack {

private int maxSize=20;

private char[]stackArray;

private int top;

public Stack() {

stackArray =new char[maxSize];

top = -1;

while (!isEmpty()) {

long value = pop();

System.out.print(value);

System.out.print(" ");

}

System.out.println("");

}

public void push(char j) {

stackArray[++top] = j;

}

public char pop() {

return stackArray[top--];

}

public char peek() {

return stackArray[top];

}

public boolean isEmpty() {

return (top == -1);

}

}

··············································································

public class DateStr_StackReverse {

private Stringinput ="www.jwkschool.cc";

private Stringoutput;

public DateStr_StackReverse()throws IOException {

String output;

output = doRev();

System.out.println("反转前: " +input);

System.out.println("反转后: " + output);

}

public String doRev() {

int stackSize =input.length();

Stack theStack =new Stack();

for (int i =0; i

char ch =input.charAt(i);

theStack.push(ch);

}

output ="";

while (!theStack.isEmpty()) {

char ch = theStack.pop();

output =output + ch;

}

return output;

}

}

运行结果:

11、Java 实例 – 队列(Queue)用法:队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此可以把LinkedList当成Queue来用。

public class DateStr_Queue {

public DateStr_Queue() {

//add()和remove()方法在失败的时候会抛出异常(不推荐)

        Queue queue =new LinkedList();         //添加元素

        queue.offer("a");

queue.offer("b");

queue.offer("c");

queue.offer("d");

queue.offer("e");

for(String q : queue){

System.out.print(q+"  ");

}

System.out.println("`````````````````");

System.out.println("poll="+queue.poll());//返回第一个元素,并在队列中删除

        for(String q : queue){

System.out.print(q+"  ");

}

System.out.println("\n`````````````````");

System.out.println("element="+queue.element());//返回第一个元素

        for(String q : queue){

System.out.print(q+"  ");

}

System.out.println("\n`````````````````");

System.out.println("peek="+queue.peek());//返回第一个元素

        for(String q : queue){

System.out.print(q+"  ");

}

}

}

运行结果:

12、Java 实例 – 获取向量的最大元素:使用 Vector 类的 v.add() 方法及 Collection 类的 Collections.max() 来获取向量的最大元素。

public class DateStr_VectorGetMax {

public DateStr_VectorGetMax() {

Vector v =new Vector();

v.add(new Double("3.4324"));

v.add(new Double("3.3532"));

v.add(new Double("3.342"));

v.add(new Double("3.349"));

v.add(new Double("2.3"));

Object obj = Collections.max(v);

System.out.println("向量中的元素有:"+v);

System.out.println("最大元素是:"+obj);

}

}

运行结果:

13、Java 实例 – 链表修改:使用 listname.add() 和 listname.set() 方法来修改链接中的元素。

public class DateStr_LinklistUpdate {

public DateStr_LinklistUpdate() {

LinkedList officers =new LinkedList();

officers.add("B");

officers.add("B");

officers.add("T");

officers.add("H");

officers.add("P");

System.out.println("原链表:"+officers);

officers.set(2,"M");

System.out.println("新链表:"+officers);

}

}

运行结果:

14、Java 实例 – 旋转向量:使用 swap() 函数来旋转向量。

public class DateStr_VectorRevolve {

public DateStr_VectorRevolve() {

Vector v =new Vector();

v.add("1");

v.add("2");

v.add("3");

v.add("4");

v.add("5");

System.out.println("原向量:"+v);

Collections.swap(v,0,4);

System.out.println("旋转后:"+v);

}

}

运行结果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容