java数据结构之堆栈
建立节点类(Node.java)
package com.yz.mystack;
public class Node {
Object data;
Node next;
public Node(Object data){
this.data=data;
next=null;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
建立链表(Link.java)
package com.yz.mystack;
public class Link {
Node head;
public Link(){
head=new Node(null);
}
public void addNode(Node node){
Node p=head;
node.setNext(p.getNext());
p.setNext(node);
}
public void delNode(){
if(!isEmploy()){
head.setNext(head.getNext().getNext());
}
}
public Node gettop(){
return head.getNext();
}
public Boolean isEmploy(){
return head.getNext()==null;
}
public void display(){
Node p=head;
while(true){
p=p.getNext();
if(p!=null){
System.out.println(p.getData());
}else{
break;
}
}
}
}
建立堆栈
package com.yz.mystack;
public class Stack {
Link link;
public Stack(){
link=new Link();
}
public void push(Object data){
link.addNode(new Node(data));
}
public Object peek(){
return link.gettop().getData();
}
public Object pop(){
Object data=peek();
link.delNode();
return data;
}
}
测试(Man.java)
package com.yz.mystack;
public class Man {
public static void main(String[] args){
Stack stack=new Stack();
stack.push("aa");
stack.push("bb");
stack.push("cc");
System.out.println(stack.peek());
System.out.println(stack.peek());
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
相关文档:
1 如果一块内存区域能够重复利用,最好不要申请新的。这个内存区域有可能是系统的一个类,自己的一个内部有数组元素,或者能够放大量数据的结构。
2 最好不要在循环里面申请内存,循环越大,越坏事。换句话说,申请内存频率别太高。好比一个人每顿吃两碗饭正好,身体的消化系统可以承受,如果让他一顿把十顿的都吃掉,不胀 ......
1)静态变量本身不会被回收
2)静态变量所引用的对象是可以回收的。
第一点大家应该没有疑问,下面我证明第2点:
看下面的例子及注释。自己可以运行试一下, 注意加上-verbose:gc参数
java -verbose:gc TestStaticGc
// TestStaticGc.java
public class TestStaticGc {
& ......
数据结构和算法
冒泡:每次比较都可找出最大或最小的,有序的在最右边
选择排序:有序的在最左边
插入排序:速度比冒泡快一倍,比选择也快。
递归
调用自身
汉诺塔问题:
/**
* @汉诺塔的问题
*/
......
通常情况下,我们在写一个类时,一般会赋予它一个或几个public的构造函数,让外部程序能够创建对象. 然而,在effective java 中,从另一个角度告诫我们在使用public的构造函数前,先考虑用public 的静态函数来创建对象.
其优点如下:
1. 一个静态的工厂函数,可以取不同的名字. 而构造函数的名字只能与类同名.
......