全站最帅😎
发布于 2020-05-14 / 1936 阅读
0
0

数据结构:栈(数组实现)

栈(stack)又名后进先出表,它是一种运算受限的线性表。
其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

进栈:入栈或压栈,将新元素放到栈顶元素的上面,使之成为新的栈顶元素
出栈:退栈,将栈顶元素删除掉,使得与其相邻的元素成为新的栈顶元素

image.png
通过数组来实现栈。定义数组elements,有一个当前栈顶的指针top,从图中可以看出:

  1. 空栈:top = -1;
  2. 栈满:top == elements.length - 1;
    image.png
    Java代码如下:
import java.util.Arrays;

/**
 * @author lichen
 * @version 1.0.0
 * @date 2020-05-14 15:40
 */
public class MyStack {

    Object[] elements;
    int top = -1;

    public MyStack(int initSize) {
        this.elements = new Object[initSize];
    }

    public boolean isFull() {
        return top == elements.length - 1;
    }

    public boolean isEmpty() {
        return top == -1;
    }

    public Object peek() {
        return elements[top];
    }

    public Object push(Object data) {
        if (isFull()) {
            return null;
        }
        top++;
        elements[top] = data;
        return data;
    }


    public Object pop() {
        if (isEmpty()) {
            return null;
        }
        Object topData = elements[top];
	// GC
        elements[top] = null;
        top--;
        return topData;
    }

    public static void main(String[] args) {
        MyStack stack = new MyStack(5);
        stack.push(4);
        stack.push(5);
        stack.push(6);
        stack.push(7);
        stack.push(8);
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.peek());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.push(9));
        System.out.println(Arrays.toString(stack.elements));
    }

}



评论