写一个MyStack 类,表示“栈”这种数据结构。 栈在表示上,就如同一个单向开口的盒子,每当有新数据进入时,都是进入栈顶。

import java.util.ArrayList;
import java.util.List;

/**
 	【编码】写一个MyStack 类,表示“栈”这种数据结构。 
	 栈在表示上  ,   就如同一个单向开口的盒子,每当有新数据进入时,都是进入栈顶。    
	 其基 本操作为push 和pop。push 表示把一个元素加入栈顶,pop 表示把栈顶元素弹出。  
	栈的特点:先进后出。   
	栈的基本操作: 
	1) push(Object o):表示把元素放入栈 
	2) Object pop():返回栈顶元素,并把该元素从栈中删除。如果栈为空,则返回 null 值 
	3) Object peek():返回栈顶元素,但不把该元素删除。如果栈为空,则返回null值。
	4) boolean isEmpty():判断该栈是否为空 
	5) int size():返回该栈中元素的数量 
	要求: 利用List,实现栈。存放整数Integer对象即可
 */
public class MyStack {

	List list = new ArrayList<>();

	// 1) push(Object o):表示把元素放入栈
	public void push(Integer o) {
		list.add(o);
	}

	// 2) Object pop():返回栈顶元素,并把该元素从栈中删除。如果栈为空,则返回 null 值 
	public Integer pop() {

		// 栈在表示上 就如同一个单向开口的盒子,每当有新数据进入时,都是进入栈顶
		// 所以对其操作就是集合下标的最后一个元素
		if (list.size() == 0) {
			return null;
		} else {
			// 只需删除集合中最后一个元素的下标位置,因为从0开始,所以最后一个小标是 长度-1
			return list.remove(list.size() - 1);
		}
	}

	// 3) Object peek():返回栈顶元素,但不把该元素删除。如果栈为空,则返回null值。
	public Integer peek() {
		if (list.size() == 0) {
			return null;
		} else {
			// 获取左后一个小标位置
			return list.get(list.size() - 1);
		}
	}

	// 4) boolean isEmpty():判断该栈是否为空 
	public boolean isEmpty() {
		return list.size() == 0;
	}

	// 5) int size():返回该栈中元素的数量 
	public int size() {
		return list.size();
	}
}

public class MyStackTest {
	public static void main(String[] args) {
		MyStack myStack = new MyStack();

		myStack.push(1);
		myStack.push(2);
		myStack.push(3);
		myStack.push(4);
		System.out.println(myStack.list);

		System.out.println("栈大小:" + myStack.size());

		System.out.println("是否为空:" + myStack.isEmpty());

		// 返回栈顶元素,但不把该元素删除,因此返回只是最后一个下标位置的元素
		System.out.println(myStack.peek());
		System.out.println(myStack.peek());
		System.out.println(myStack.peek());
		System.out.println(myStack.peek());
		System.out.println("..............");

		// 返回栈顶元素,并把该元素从栈中删除。因此返回的是 每次从最后一个下标位置删除的元素
		System.out.println(myStack.pop());
		System.out.println(myStack.pop());
		System.out.println(myStack.pop());
		System.out.println(myStack.pop());
		System.out.println(myStack.pop());

	}
}
/*
运行的:
 [1, 2, 3, 4]
栈大小:4
是否为空:false
4
4
4
4
..............
4
3
2
1
null

 * */


你可能感兴趣的:(集合)