一、栈 Stack
1、 栈也是一种线性数据结构
规定只能从栈顶添加元素,也只能从栈顶取出元素
栈是一种后入先出的数据结构(LIFO)
2.栈的具体实现:
Stack<E>
void push(E)
E pop()
E peek()
int getSize()
boolean isEmpty
3.时间复杂度分析
ArrayStack<E>
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<T> {
private MySelfArray<T> 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、创建自己的栈
* 2、向栈中添加元素
* 3、查看栈顶元素
* 4、移除栈顶元素
* 5、移除找中所有元素
* 6、查看栈是否为空
*/
// 1、创建自己的栈
MyStack<String> 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());
}
}

本文介绍了栈这种线性数据结构,特别是使用Java实现的Stack类,包括push、pop、peek等方法,以及ArrayStack的时间复杂度分析。文章还提到了如何在IntelliJ IDEA中进行相关操作。

被折叠的 条评论
为什么被折叠?



