一、概念
- 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守**后进先出LIFO(Last In First Out)**的原则。
- 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶
- 出栈:栈的删除操作叫做出栈。出数据在栈顶
- 图示:
二、栈的实现
1、利用顺序表实现,即使用尾插 + 尾删的方式实现
2、利用链表实现,则头尾皆可
3、代码示例:
相对来说,顺序表的实现上要更为简单一些,所以我们优先用顺序表实现栈。
/*
* 栈的顺序表实现:
* 利用顺序表实现,即使用尾插 + 尾删的方式实现
*
*/
import java.util.Arrays;
public class LinkStack {
private int[] elem;//数组
private int top;//下标-》栈顶指针
public void linkstack() {
this.elem = new int[10];
}
/*
* 入栈操作
* elem:代表入栈的元素
*/
public boolean isFull() {
return this.elem.length == this.top;
}
public void push(int item) {
//1.判断当前栈是否是满的
if (isFull()) {
this.elem = Arrays.copyOf(this.elem, 2 * this.elem.length);
}
//2.elem[top] = elem; top ++
this.elem[top++] = item;
}
/*
* 出栈操作
* return :代表出栈的元素
*/
public int pop() {
if (isEmpty()) {
throw new UnsupportedOperationException("栈为空");
}
return this.elem[--this.top];
}
/*
* 得到栈顶元素,但是不能删除
*/
public int peek() {
return this.elem[top - 1];
}
public boolean isEmpty() {
return this.top == 0;
}
@Override
public String toString() {
return "LinkStack{" +
"elem=" + Arrays.toString(elem) +
'}';
}
public static void main(String[] args) {
LinkStack stack = new LinkStack();
stack.linkstack();
stack.push(1);
stack.push(2);
System.out.println(stack.pop()); // 2
System.out.println(stack.peek()); // 1
System.out.println (stack); // LinkStack{elem=[1, 2, 0, 0, 0, 0, 0, 0, 0, 0]}
}
}
三、栈(Stack)的使用方法
方法 | 解释 |
---|---|
E push (E item) | 压栈 |
E pop() | 出栈 |
E peek() | 查看栈顶元素 |
boolean empty() | 判断栈是否为空 |
总结
以上就是今天要讲的内容,本文仅仅简单介绍了Stack的实现,而栈(Stack)的使用方法中提供了能使我们快速便捷地处理数据的函数和方法。