相关实战
一、简单介绍
- 栈是一种后入先出的有序列表,是一种线性数据结构;
- 栈只允许在一端进行插入和删除,这一端叫做栈顶,另外一端叫做栈底;
二、应用场景
- 子程序的调用:在跳往子程序前,会将下个指令的地址压入到栈中,当子程序处理完之后,再从栈中将指令取出来。
- 二叉树的遍历;
- 表达式的求值等等;
三、数组实现栈
(一)思路分析
一直保证从数组的最后一个元素加入或者删除即可。
(二)代码实现
package com.firewolf.javabase.s004;
/**
* 使用数组来实现栈结构
*/
public class ArrayStack {
/**
* 默认容量为10
*/
private static final Integer DEFAULT_CAPICITY = 10;
/**
* 队列容量
*/
private int capacity;
/**
* 存放数据的容器
*/
private Object[] data;
/**
* 当前大小
*/
private int size;
public ArrayStack(int capacity) {
this.capacity = capacity;
data = new Object[capacity];
}
public ArrayStack() {
this(DEFAULT_CAPICITY);
}
/**
* 添加元素
*
* @param el 要被添加的元素
* @return 添加成功返回true,否则false
*/
public boolean push(Object el) {
if (full()) {
return false;
}
data[size++] = el;
return true;
}
/**
* 弹出栈顶数据
*/
public Object pop() {
if (empty()) {
return null;
}
return data[--size];
}
/**
* 查看栈顶元素,只查看不弹出
*/
public Object peek() {
if (empty()) {
return null;
}
return data[size - 1];
}
/**
* 显示所有元素,其实不应该有这种方法
*/
public void showAll() {
for (int i = 0; i < size; i++) {
System.out.print(data[i] + " ");
}
System.out.println();
}
/**
* 栈是否满了
*/
public boolean full() {
return size == capacity;
}
/**
* 栈是否为空
*/
public boolean empty() {
return size == 0;
}
public Integer size() {
return size;
}
}
四、链表实现栈
(一)思路分析
通过addLast和removeLast来添加或者删除最后一个元素即可;
(二)代码
package com.firewolf.javabase.s004;
import java.util.LinkedList;
import lombok.extern.slf4j.Slf4j;
/**
* 使用链表来实现栈结构
*/
@Slf4j
public class LinkedListStack<T> {
/**
* 数据容器
*/
private LinkedList<T> data;
/**
* 默认容量为10
*/
private static final Integer DEFAULT_CAPICITY = 10;
/**
* 队列容量
*/
private int capacity;
/**
* 当前大小
*/
private int size;
public LinkedListStack(int capacity) {
this.capacity = capacity;
data = new LinkedList<T>();
}
public LinkedListStack() {
this(DEFAULT_CAPICITY);
}
/**
* 添加元素
*
* @param el 要被添加的元素
* @return 添加成功返回true,否则false
*/
public boolean push(T el) {
if (full()) {
return false;
}
data.addLast(el);
size++;
return true;
}
/**
* 弹出栈顶数据
*/
public T pop() {
if (empty()) {
return null;
}
T t = data.removeLast();
size--;
return t;
}
/**
* 查看栈顶元素,只查看不弹出
*/
public Object peek() {
if (empty()) {
return null;
}
return data.peekLast();
}
/**
* 显示所有元素,其实不应该有这种方法
*/
public void showAll() {
for (int i = 0; i < data.size(); i++) {
System.out.print(data.get(i)+" ");
}
System.out.println();
}
/**
* 栈是否满了
*/
public boolean full() {
return size == capacity;
}
/**
* 栈是否为空
*/
public boolean empty() {
return size == 0;
}
public Integer size() {
return size;
}
}

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



