1、 栈也是一种线性数据结构
规定只能从栈顶添加元素,也只能从栈顶取出元素
栈是一种后入先出的数据结构(LIFO)
2.栈的具体实现:
Stack
void push(E)
E pop()
E peek()
int getSize()
boolean isEmpty
3.时间复杂度分析
ArrayStack
void push(E)
E pop()
E peek()
int getSize()
boolean isEmpty()
MyStack构造方法:
package com.ffyc.lesson.lesson2; import com.ffyc.lesson.lesson1.MySelfArray; import com.fs.lesson.lesson01.MySelfArray; public class MyStack{ private MySelfArray data;// 保存数据的容器 private int size; //栈中元素个数 // 有参数的构造器 public MyStack(int capacity) { this.data = new MySelfArray<>(capacity); } public MyStack() { this.data = new MySelfArray<>(); } // 获取栈中的元素个数 public int getSize(){ return this.size; } // 判断栈是否为空 public boolean isEmpty(){ return this.size == 0; } // 向栈中添加元素 public void push(T ele){ this.data.addElementTail(ele); // 时间复杂度最低 this.size++; } // 从栈顶取出元素 public T pop(){ T res = this.data.removeElementFromTail(); this.size--; return res; } // 查看栈顶元素 public T peek(){ return this.data.getLastElement(); } }
main方法:
package com.fs.lesson.lession02;
import java.util.Arrays;
public class TestStack {
public static void main(String[] args) {
// 1、创建自己的栈
MyStack myStack = new MyStack<>(50);
// 2、向栈中添加元素
String[] fruits = {"apple", "orange", "watermelon", "pear", "banana"};
Arrays.stream(fruits).forEach(myStack::push);
// 3、查看栈顶元素
String fruit = myStack.peek();
System.out.println("The Stack top element is :" + fruit);
// 4、移除栈顶元素
String topEle = myStack.pop();
System.out.println("remove top element:" + topEle);
// 3、查看栈顶元素
fruit = myStack.peek();
System.out.println("The Stack top element is :" + fruit);
// 5、移除找中所有元素
while (!myStack.isEmpty()) {
topEle = myStack.pop();
System.out.println("remove top element:" + topEle);
}
// 6、查看栈是否为空
System.out.println("Is the stack empty?" + myStack.isEmpty());
}
}



