栈,队列,并查集等算法工具实现(1)

2014-11-24 07:37:12 · 作者: · 浏览: 0

最近总有朋友问我,为什么写的算法使用的是lee.tools包下的栈和队列。 为了好玩啊,JAVA是有一套集合框架,实现了栈,队列,集合,优先队列等常用的数据结构,但为了掌握这些工具的使用,最好的方法就是自己写一套。公布一下lee.tools的代码


lee.tools.ArrayStack;
lee.tools.CircleQueue;
lee.tools.LinkedStack;
lee.tools.Queue;
lee.tools.Stack;
lee.tools.UF;

先定义一下栈的API, 栈有两个实现――链栈,顺序栈

package lee.tools;
public interface Stack
  
    {
	public boolean isEmpty();  //判断是否为空
	public T pop();             //弹出
	public void push(T key);   //压入
	public boolean isFull();   //判断是否栈满
	public T peep();        //查看栈顶元素
}
  

链栈实现:

package lee.tools;
public  class LinkedQueue
  
    implements Queue
   
    { Node
    
      head; Node
     
       tail; int size; public boolean isEmpty(){ if(head==null){ return true; } else{ return false; } } public void enQuene(T data){ if(head==null){ head = new Node
      
       (data); tail=head; } else{ tail.next=new Node
       
        (data); tail = tail.next; } } public T deQueue(){ if(!isEmpty()){ T temp =head.data; head = head.next; return temp; } else return null; } class Node
        
         { T data; Node
         
           next; Node(T d){ data = d; } } } 
         
        
       
      
     
    
   
  

顺序栈的实现:

package lee.tools;
public class ArrayStack
  
    implements Stack
   
    { T arr[]; int size; int top; @SuppressWarnings("unchecked") public ArrayStack(){ size = 5; arr = (T[]) new Object[size]; top=-1; } @Override public boolean isEmpty() { if(top==-1){ return true; } else{ return false; } } @Override public T pop() { if(isEmpty()){ System.out.println("error! Stack is empty"); return null; } return arr[top--]; } @Override public void push(T key) { if(isFull()){ enLargeStack(); } arr[++top] = key; } @Override public boolean isFull() { if(top == size-1){ return true; } return false; } public void enLargeStack(){ @SuppressWarnings("unchecked") T[] newArr = (T[]) new Object[size*2]; size = size*2; for(int i=0;i