一 .Stack
-
stack定义:栈是一种只能在一端进行插入或删除操作的线性表。(先进后出表)
-
Java Collection框架提供了一个Stack类,用于建模和实现Stack数据结构。该类基于后进先出的基本原则。除了基本的push和pop操作之外,该类还提供了另外三个函数 empty,search和peek。该类也可以说是扩展Vector并将该类视为具有上述五个函数的堆栈。该类也可以称为Vector的子类。
此图显示了Stack类的层次结构:
该类支持一个默认构造函数 Stack(),用于创建空的栈。
下面的程序显示了Stack类提供的一些基本操作:
import java.util.Stack;
//java code for stack implementation
class Test {
//Pushing element on the top of the stack
static void stack_push(Stack<Integer> stack) {
for (int i = 0; i < 5; i++) {
stack.push(i);
}
}
//Popping element from the top of the stack
static void stack_pop(Stack<Integer> stack) {
System.out.println("Pop :");
for (int i = 0; i < 5; i++) {
Integer y = (Integer) stack.pop();
System.out.println(y);
}
}
//Displaying element on the top of the stack
static void stack_peek(Stack<Integer> stack) {
Integer element = (Integer) stack.peek();
System.out.println("Element on stack top : " + element);
}
//Searching element in the stack
static void stack_search(Stack<Integer> stack, int element) {
Integer pos = (Integer) stack.search(element);
if (pos == -1) {
System.out.println("Element not found");
} else {
System.out.println("Element is found at position " + pos);
}
}
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
System.out.println("初始的stack: " + stack);
stack_push(stack);//push 进了 0,1,2,3,4
stack_pop(stack); // 弹出了 4,3,2,1,0
System.out.println("弹出后的stack: " + stack);
stack_push(stack);//push 进了0,1,2,3,4
stack_peek(stack);//查看栈顶
stack_search(stack,2);//查找元素2,返回2的index
stack_search(stack,6);//查找元素6
}
}
结果:
初始的stack: []
Pop :
4
3
2
1
0
弹出后的stack: []
Element on stack top : 4
Element is found at position 3
Element not found
二.Stack类中的方法:
- Object push(Object element):将元素推送到堆栈顶部。
- Object pop():移除并返回堆栈的顶部元素。如果我们在调用堆栈为空时调用pop(),则抛出’EmptyStackException’异常。
- Object peek():返回堆栈顶部的元素,但不删除它。
- boolean empty():如果堆栈顶部没有任何内容,则返回true。否则,返回false。
- int search(Object element):确定对象是否存在于堆栈中。如果找到该元素,它将从堆栈顶部返回元素的位置。否则,它返回-1。
看个测试例子:
import java.util.Stack;
public class Test01 {
public static void main(String[] args) {
Stack stack = new Stack();
//1.empty()栈是否为空
System.out.println(stack.empty());
//2.peek()栈顶值 3.进栈push()
stack.push(1);
stack.push("b");
System.out.println(stack.peek());
//4.pop()出栈
stack.pop();//b 出栈了
System.out.println(stack);
System.out.println(stack.peek());
}
}
结果:
true
b
[1]
1