《大话数据结构》第四章栈与队列

1.栈是限定仅在表尾进行插入和删除的线性表

    允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素的栈称为空栈,栈又称为后进先出的线性表,简称LIFO结构。

1.1 栈的插入操作,叫做进栈,也称压栈,入栈。子弹如弹夹

       栈的删除操作,叫做出栈。子弹弹出弹夹

1.2 先进栈的元素是不是只能最后出栈?

答案不一定,如果有3个元素,有5种可能的出栈顺序。

1.3 栈的顺序存储结构和实现

1.3.1 用数组实现栈,下标为0的一端作为栈底较好,大头做栈顶,因为经常要做插入和取出的操作。

1.3.2 我们用一个top的变量指示栈顶元素在数组中得位置,当栈只有一个元素时,top等于0,空栈的top=-1。

1.3.3 栈的结构定义

  见后面实现代码

1.3.4  若有一个栈,StackSize是5,请看下图

《大话数据结构》第四章栈与队列_第1张图片

1.3.5 栈的顺序存储结构——各种操作实现

public class StackDemo {

	public static void main(String[] args) {
		Stack stack = new Stack(5);
		stack.initStack();
	}

}

class Stack {
	private int[] data = null;
	private int capacity; // 栈的容量
	private int top; // 栈顶指针

	public Stack(int capacity) {
		this.capacity = capacity;
	}

	/*
	 * 初始化栈
	 */
	public void initStack() {
		data = new int[capacity];
		top = -1;
	}

	/*
	 * 入栈
	 */
	public String push(int element) {
		if (top == capacity - 1) {
			return "ERROR, 栈满";
		}

		// 先top加1,然后再插入值
		top++;
		data[top] = element;
		return "SUCCESS";
	}

	/*
	 * 出栈
	 */
	public int pop() {
		if (top == -1) {
			return -1; // 空栈返回-1
		}

		// 先top减1,然后再返回值
		int temp = top;
		top--;
		return data[temp];
	}

	/*
	 * 栈元素个数
	 */
	public int stackLength() {
		if (top == -1) {
			return 0;
		}
		return top + 1;
	}

	/*
	 * 判断栈是否为空
	 */
	public boolean isEmpty() {
		if (top == -1) {
			return true;
		}

		return false;
	}

	// 栈置为空
	public void clear() {
		this.top = -1;
	}

	/*
	 * 从栈底开始打印所有元素
	 */
	public void print() {
		for (int i : data) {
			System.out.print(i + " ");
		}
	}
}




你可能感兴趣的:(数据结构,String,存储,Class)