温习之数据结构——栈

zhangdell 2019-06-27

以下从开源中国拷过来的,开源中不打算用了,换一个博客。

最近暂时不工作,也有一些时间来学习,平时经常写一些很无味,很雷同的代码,感觉整个人都不好了,这几天正好可以好好利用,温习一下数据结构,对逻辑思维的锻炼和日后工作还是有一些帮助的。

今天先说一下数据结构中很简单很常见的栈,栈的特点就是先进后出,其实就像大学食堂的餐盘,服务人员在放餐盘的时候会一个个摞起来,最先放的肯定是摞完后最下面的,最后放的是摞完后最上面的那个,而去食堂的大学生想取餐盘肯定也是从最上面的那个取,直到最后一个被取走。栈也是一个道理。鄙人懒,还是不画图了。

闲话少说,还是上代码吧。

/**这里用数组来模拟栈*/
public class MyStack {
    private long [] arr;
    private int top; //相当于栈顶
    
    public MyStack(){
        arr = new long[10];
        top = -1;
    }
    public MyStack(int maxsize){
        arr = new long[maxsize];
        top = -1 ;
    }
    
    /**
     * 入栈
     */
    public void push(int value){
        arr[++top] = value;
    }
    
    /**
     * 出栈
     */
    public long pop(){
        return arr[top--];
    }
    
    /**
     * 查看数据,返回最上面的数据
     */
    public long peek(){
        if(!isEmpty()){
            return arr[top];
        }else return 0;
    }
    
    /**
     * 判断是否为空
     */
    public boolean isEmpty(){
        return top == -1;
    }
    
    /**
     * 判断是否满了
     */
    public boolean isFull(){
        return top == arr.length-1;
    }
}

测试类

package stack_queue;

public class TestMyStack {
    public static void main(String[] args) {
        MyStack ms = new MyStack(4);
        ms.push(23);
        ms.push(12);
        ms.push(1);
        ms.push(90);
//        System.out.println(ms.isEmpty());
//        System.out.println(ms.isFull());
//        
//        System.out.println(ms.peek());
//        System.out.println(ms.peek());
        
        while(!ms.isEmpty()){
            System.out.println(ms.pop() + ",");
            System.out.println(ms.peek());
        }
        System.out.println(ms.isEmpty());
        System.out.println(ms.isFull());
    }
}

鉴于这个例子太简单了,就不多做解释了,下一篇介绍队列

相关推荐