Java中的栈和队列类

Stack类:栈类  过时    public class Stack extends Vector
Queue:队列类
Deque:双端队列(栈操作建议使用)

public class LinkedList 
    extends AbstractSequentialList
    implements List, Deque, Cloneable, java.io.Serializable


public interface Deque extends Queue   扩展了java.util.Collection接口

双端队列

public interface Queue extends Collection  

扩展了java.util.Collection接口
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。

所以Java中实现栈和队列操作都可以通过使用LinkedList类实现,当然底层使用的链表。


public class ArrayDeque extends AbstractCollection
                           implements Deque, Cloneable, Serializable

ArrayDeque是Deque 接口的大小可变数组的实现

/**
 * 功能:模拟生活中罗盘子案例
 * 技能:LinkedList
 * 
 * LinkedList既可以当做线性表处理,也可以当做栈、队列使用
 * @author Administrator*
 */
public class TestDeque {

    public static void main(String[] args) {
        //创建一个栈
        Deque deque =  new LinkedList();        
        //罗盘子:入栈
//        deque.addFirst("盘子1");
//        deque.addFirst("盘子2");
//        deque.addFirst("盘子3");
        deque.push("盘子1");
        deque.push("盘子2");
        deque.push("盘子3");        
        //获取最上面的盘子:获取栈顶元素
//        System.out.println(deque.getFirst());
//        System.out.println(deque.getFirst());
//        System.out.println(deque.getFirst());
        System.out.println(deque.peek());
        System.out.println(deque.peek());
        System.out.println(deque.peek());        
        //拿走盘子:出栈
//        System.out.println(deque.removeFirst());
//        System.out.println(deque.removeFirst());
//        System.out.println(deque.removeFirst());
        System.out.println(deque.pop());
        System.out.println(deque.pop());
        System.out.println(deque.pop());

    }

}

/**
 * 功能:模拟生活中超市购物排队结算
 * 技能:使用LinkedList实现队列的操作
 * 
 * @author Administrator
 *
 */
public class TestQueue {
    public static void main(String[] args) {
        //创建一个队列
        java.util.Queue queue = new LinkedList();        
        //入队
        queue.offer("张三");
        queue.offer("李四");
        queue.offer("王五");
        //获取队头元素
        System.out.println(queue.element());
        System.out.println(queue.element());
        System.out.println(queue.element());
        //出队
        System.out.println(queue.remove());
        System.out.println(queue.poll());
        queue.offer("赵六");
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
    }
}

/**
 * 借助栈实现进制转换(10----2)
 * @author Administrator
 *
 */
public class TestConversion {
    public static void main(String[] args) {        
        int n = 13;
        int t = n;
        //String str = "";
        Deque  deque = new LinkedList();
        while(t>0){
            //除以2得到余数作为二进制位
            int mod = t%2;
            //System.out.print(mod);
            //str = mod + str;
            deque.push(mod);
            //除以2得到商作为被除数继续
            int result = t/2;
            t = result;
        }
        System.out.print(n+"--------->");
        while(!deque.isEmpty()){
            System.out.print(deque.pop());
        }        
    }
}


 

转载于:https://my.oschina.net/u/4118575/blog/3047686

你可能感兴趣的:(Java中的栈和队列类)