Java栈的三种实现(三)

Java栈的三种实现方法,使用Java自带的方法 Stack、用数组模拟Stack、用链表模拟Stack;

第一种方法,使用Java自带的Stack方法,代码如下:

package study.stack;

import java.util.Stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 * 利用Java自带的栈方法
 */
public class StackDemo {


    public static void main(String[] args){
        Stack<String> user = new Stack<String>();
        user.push("taoyongpan1");
        user.push("taoyongpan2");
        user.push("taoyongpan3");
        user.push("taoyongpan4");
        System.out.println("栈顶"+user.peek());
        System.out.println("查找"+user.search("taoyongpan1"));
        while (!user.empty()){

            System.out.println(user.pop());
        }
    }
}
运行结果:
栈顶taoyongpan4
查找4
taoyongpan4
taoyongpan3
taoyongpan2
taoyongpan1

Process finished with exit code 0

 第二张方法,用数组模拟栈,代码如下:

package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 * 利用数组创建栈
 */
public class ArrayStack {

    Object stack[] =null;
    int size;
    int top = -1;

    public ArrayStack(){
        stack = new Object[100];
        size = 100;
    }

    public ArrayStack(int size){
        stack = new Object[size];
        this.size = size;
    }
    //判断是否为空
    public boolean isEmpty(){
        if (top==-1){
            return true;
        }else {
            return false;
        }
    }
    //判断是否已满
    public boolean isFull(){
        if (top>=(size-1)){
            return true;
        }else {
            return false;
        }
    }
    //入栈
    public void push(Object item){

        if (isFull()){
            System.out.println("堆栈已经满了");
            return;
        }
        top++;
        stack[top] = item;
    }

    //出栈
    public Object pop(){
        Object item = null;
        if (isEmpty()){
            System.out.println("堆栈为空");
            return item;
        }
        item = stack[top];
        top--;
        return item;
    }

    //读取栈顶元素
    public Object peek(){
        if (isEmpty()){
            System.out.println("堆栈为空");
            return null;
        }
        return stack[top];
    }

    //读取大小
    public int size(){
        return top+1;
    }
    //获取容量

    public int capcity(){
        return size;
    }

}
package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 */
public class StackArrayDemo {

    public static void main(String[] args){
        ArrayStack user = new ArrayStack();
        user.push("taoyongpan1");
        user.push("taoyongpan2");
        user.push("taoyongpan3");
        user.push("taoyongpan4");
        System.out.println("堆栈的大小:"+user.size);
        System.out.println(user.peek());
        while (!user.isEmpty()){
            System.out.println(user.pop());
        }
    }
}

 结果如下:

堆栈的大小:100
taoyongpan4
taoyongpan4
taoyongpan3
taoyongpan2
taoyongpan1

Process finished with exit code 0

 第三种方法,代码 如下:

package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 */
public class StackNode {

    private Object data;
    private StackNode next;
    //创建头结点
    public StackNode(){
        data = null;
        next = null;
    }
    //添加节点
    public StackNode(Object data){
        this.data = data;
        next = null;
    }
    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public StackNode getNext() {
        return next;
    }

    public void setNext(StackNode next) {
        this.next = next;
    }
}
package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 */
public class StackNodeDemo {

    StackNode head = null;
    public StackNodeDemo(){
        head =new StackNode();
    }

    //入栈
    public void push(Object data){
        StackNode newNode = new StackNode(data);
        newNode.setNext(head.getNext());
        head.setNext(newNode);
    }
    //判断是否为空
    public boolean isEmpty(){
        if (head.getNext()==null){
            return true;
        }else {
            return false;
        }
    }
    //出栈
    public Object pop(){
        Object item = null;
        if (isEmpty()){
            return item;
        }
        item = head.getNext().getData();
        head.setNext(head.getNext().getNext());
        return item;
    }

    //获得栈的大小
    public int size(){
        int len = 0;
        StackNode node = head;
        while (node.getNext()!=null){
            len++;
            node = node.getNext();
        }
        return len;
    }
    //读取栈顶元素
    public Object peek(){
        Object item = null;
        if (isEmpty()){
            return item;
        }
        item = head.getNext().getData();
        return item;
    }
    public static void main(String[] args){
        StackNodeDemo user = new StackNodeDemo();
        user.push("taoyongpan1");
        user.push("taoyongpan2");
        user.push("taoyongpan3");
        user.push("taoyongpan4");
        System.out.println("栈的大小:"+user.size());
        System.out.println("读取栈顶元素:"+user.peek());
        while (!user.isEmpty()){
            System.out.println(user.pop());
        }
    }
}

 运行结果如下:

栈的大小:4
读取栈顶元素:taoyongpan4
taoyongpan4
taoyongpan3
taoyongpan2
taoyongpan1

Process finished with exit code 0

猜你喜欢

转载自taoyongpan.iteye.com/blog/2396214
今日推荐