📅  最后修改于: 2023-12-03 15:23:41.283000             🧑  作者: Mango
堆栈(Stack)是一种数据结构,它具有LIFO(Last In First Out)的特点,即后进先出。它的基本操作包括:入栈(push)和出栈(pop)。
栈的实现可以有两种方式:数组实现和链表实现。
数组实现的栈,可以用一维数组来存储。数组中的第一个元素被称为栈底,最后一个元素被称为栈顶。当一个元素被压入栈时,它被放置在栈顶位置;当一个元素被弹出栈时,它从栈顶位置移除。
下面是Java语言实现数组栈的代码:
public class ArrayStack {
private int[] array;
private int top;
private int capacity;
public ArrayStack(int capacity) {
this.capacity = capacity;
this.array = new int[capacity];
this.top = -1;
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
return (top == capacity-1);
}
public void push(int item) {
if (isFull()) {
throw new RuntimeException("Stack is full!");
}
array[++top] = item;
}
public int pop() {
if (isEmpty()) {
throw new RuntimeException("Stack is empty!");
}
return array[top--];
}
public int peek() {
if (isEmpty()) {
throw new RuntimeException("Stack is empty!");
}
return array[top];
}
}
链表实现的栈,可以用单向链表来存储。链表中的第一个节点被称为栈顶,最后一个节点被称为栈底。当一个元素被压入栈时,它被放置在栈顶位置;当一个元素被弹出栈时,它从栈顶位置移除。
下面是Java语言实现链表栈的代码:
public class LinkedListStack {
private Node top;
private class Node {
private int data;
private Node next;
public Node(int data, Node next) {
this.data = data;
this.next = next;
}
}
public boolean isEmpty() {
return (top == null);
}
public void push(int item) {
Node newNode = new Node(item, top);
top = newNode;
}
public int pop() {
if (isEmpty()) {
throw new RuntimeException("Stack is empty!");
}
int item = top.data;
top = top.next;
return item;
}
public int peek() {
if (isEmpty()) {
throw new RuntimeException("Stack is empty!");
}
return top.data;
}
}
栈在计算机科学和编程中有着广泛的应用场景。下面列举几个常用的场景:
堆栈(Stack)是一种数据结构,它具有LIFO(Last In First Out)的特点。栈的实现可以有数组实现和链表实现两种方式。栈在计算机科学和编程中有着广泛的应用场景。