寫一個MyStack 類,表示“棧”這種資料結構。 棧在表示上,就如同一個單向開口的盒子,每當有新資料進入時,都是進入棧頂。
阿新 • • 發佈:2019-02-05
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
* */