Java函数:如何实现栈数据结构?
发布时间:2023-05-26 16:30:25
栈(Stack)是一种线性数据结构,具有后进先出(Last-In-First-Out,LIFO)的特性。在Java中,我们可以利用数组和链表来实现栈。
1. 使用数组实现栈
首先,我们需要定义一个数组来存储栈元素,并设定栈的大小。在栈顶元素插入和删除时,我们只需要调整栈顶指针即可。
以下是一个使用数组实现栈的Java代码示例:
public class ArrayStack {
private int top; // 栈顶指针
private int[] stack; // 存储栈元素的数组
private int size; // 栈的大小
// 构造方法
public ArrayStack(int size) {
this.top = -1; // 初始栈顶指针设为-1,表示栈为空
this.stack = new int[size];
this.size = size;
}
// 入栈操作
public void push(int data) {
if (isFull()) { // 栈已满
throw new RuntimeException("Stack is full!");
}
stack[++top] = data;
}
// 出栈操作
public int pop() {
if (isEmpty()) { // 栈为空
throw new RuntimeException("Stack is empty!");
}
return stack[top--];
}
// 获取栈顶元素
public int peek() {
if (isEmpty()) { // 栈为空
throw new RuntimeException("Stack is empty!");
}
return stack[top];
}
// 判断栈是否为空
public boolean isEmpty() {
return top == -1;
}
// 判断栈是否已满
public boolean isFull() {
return top == size - 1;
}
}
2. 使用链表实现栈
除了数组,我们还可以使用链表来实现栈。链表头即为栈顶,入栈时将新元素插入到链表头,出栈时将链表头删除即可。
以下是一个使用链表实现栈的Java代码示例:
public class LinkedStack {
private Node top; // 栈顶指针
private int size; // 栈的大小
// 定义节点类
private class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
}
}
// 构造方法
public LinkedStack() {
this.top = null; // 初始栈顶指针设为null,表示栈为空
this.size = 0;
}
// 入栈操作
public void push(int data) {
Node newNode = new Node(data);
newNode.next = top;
top = newNode;
size++;
}
// 出栈操作
public int pop() {
if (isEmpty()) { // 栈为空
throw new RuntimeException("Stack is empty!");
}
int data = top.data;
top = top.next;
size--;
return data;
}
// 获取栈顶元素
public int peek() {
if (isEmpty()) { // 栈为空
throw new RuntimeException("Stack is empty!");
}
return top.data;
}
// 判断栈是否为空
public boolean isEmpty() {
return top == null;
}
// 获取栈的大小
public int size() {
return size;
}
}
以上是使用数组和链表两种方式实现栈的Java代码示例。具体选择何种实现方式,取决于具体的应用场景和需求。
