返回
C 语言实现栈
后端
2024-02-08 09:57:03
栈是一种遵循先进后出的数据结构,具有先入后出(FILO)的特性。它和队列类似,也是线性的数据结构。在 C 语言中,栈可以利用顺序表的数据结构来实现。
栈的定义与基本操作
一个栈包含一个数组和一个栈顶指针,栈顶指针指向栈中最后一个元素的位置。入栈是指把一个元素放入栈中,即把一个元素添加到数组中并更新栈顶指针。出栈是指把一个元素从栈中取出,即从数组中删除最后一个元素并更新栈顶指针。获取栈顶元素是指把一个元素从栈中取出而不删除它,即把一个元素从数组中删除并更新栈顶指针。
C 语言实现栈
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct Stack {
int top;
int data[MAX_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
void push(Stack *s, int data) {
if (s->top == MAX_SIZE - 1) {
printf("Stack is full\n");
return;
}
s->data[++s->top] = data;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->data[s->top--];
}
int peek(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->data[s->top];
}
int main() {
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("%d\n", peek(&s));
printf("%d\n", pop(&s));
printf("%d\n", peek(&s));
return 0;
}
初始化栈
首先,需要初始化栈,即把栈顶指针设置为 -1。
void initStack(Stack *s) {
s->top = -1;
}
判断栈是否为空
接着,需要判断栈是否为空,即检查栈顶指针是否等于 -1。
int isEmpty(Stack *s) {
return s->top == -1;
}
入栈
入栈操作是把一个元素添加到栈中。首先,需要检查栈是否已满。如果栈已满,则无法再入栈。否则,把元素添加到数组中并更新栈顶指针。
void push(Stack *s, int data) {
if (s->top == MAX_SIZE - 1) {
printf("Stack is full\n");
return;
}
s->data[++s->top] = data;
}
出栈
出栈操作是把一个元素从栈中取出。首先,需要检查栈是否为空。如果栈为空,则无法再出栈。否则,从数组中删除最后一个元素并更新栈顶指针。
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->data[s->top--];
}
获取栈顶元素
获取栈顶元素操作是把一个元素从栈中取出而不删除它。首先,需要检查栈是否为空。如果栈为空,则无法再获取栈顶元素。否则,从数组中删除最后一个元素并更新栈顶指针。
int peek(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->data[s->top];
}