1. 程式人生 > >寫一個MyStack 類,表示“棧”這種資料結構。 棧在表示上,就如同一個單向開口的盒子,每當有新資料進入時,都是進入棧頂。

寫一個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<Integer> 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

 * */