📅  最后修改于: 2023-12-03 15:23:41.366000             🧑  作者: Mango
堆栈是一种线性数据结构,它具有后进先出 (Last-In-First-Out,LIFO) 的特点,即最后一个进入的元素最先被弹出。它可以使用数组和链表来实现。
下面是堆栈的基本操作:
push()
:向堆栈中添加一个元素;pop()
:从堆栈中弹出一个元素;top()
:获取堆栈顶端的元素;empty()
:判断堆栈是否为空;size()
:获取堆栈的大小。使用数组来实现堆栈,需要定义一个数组作为堆栈的存储空间,并使用一个整数变量 top
来指向堆栈顶端的元素的位置。在定义数组时,需要指定它的最大大小。
constexpr int MAX_SIZE = 100; // 最大大小
int stack[MAX_SIZE]; // 堆栈数组
int top = -1; // 栈顶指针
void push(int x)
{
if (top == MAX_SIZE - 1) {
printf("Error: stack overflow.\n"); // 堆栈已满
return;
}
stack[++top] = x; // 入栈
}
void pop()
{
if (top == -1) {
printf("Error: stack underflow.\n"); // 堆栈已空
return;
}
top--; // 出栈
}
int top()
{
if (top == -1) {
printf("Error: stack underflow.\n"); // 堆栈已空
return -1;
}
return stack[top]; // 返回栈顶元素
}
bool empty()
{
return top == -1; // 判断堆栈是否为空
}
int size()
{
return top + 1; // 返回堆栈的大小
}
另一种实现堆栈的方法是使用链表。在链表中,每个节点都有一个指向前一个节点的指针。使用链表来实现堆栈,只需要定义一个指向链表头的指针即可。
struct node {
int val;
node *prev;
node(int x) : val(x), prev(nullptr) {}
};
class stack {
private:
node *head;
int sz;
public:
stack() : head(nullptr), sz(0) {}
void push(int x) {
node *new_node = new node(x);
new_node->prev = head;
head = new_node;
sz++;
}
void pop() {
if (head == nullptr) {
printf("Error: stack underflow.\n");
return;
}
node *tmp = head;
head = head->prev;
delete tmp;
sz--;
}
int top() {
if (head == nullptr) {
printf("Error: stack underflow.\n");
return -1;
}
return head->val;
}
bool empty() {
return head == nullptr;
}
int size() {
return sz;
}
};
堆栈是一种非常重要的数据结构,在计算机科学中广泛应用。它可以用于函数调用和递归算法等方面。本文介绍了两种实现堆栈的方法,即数组和链表。如果你对本文有任何疑问或建议,请在评论区留言。