一.栈(先进后出)
限定在一端(表尾)进行插入或删除操作的线性表。表尾端称栈顶,表头端称栈底。
二.例子
例:若入栈顺序为abcdefg,出栈顺序为bdcfeag;则栈的容量最小为多少?
解:根据表的先进后出特点,得以下推论:
综上所述,该栈最小容量为3.
三.代码应用
1.实现代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 栈的最大容量
typedef struct {
int data[MAX_SIZE]; // 存储栈元素
int top; // 栈顶指针,指向栈顶元素的下标
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
void push(Stack *s, int value) {
if (isFull(s)) {
printf("Stack is full!\n");
return;
}
s->data[++(s->top)] = value;
}
// 出栈
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);
push(&s, 4);
printf("Top element: %d\n", peek(&s)); // 输出栈顶元素
while (!isEmpty(&s)) {
printf("%d ", pop(&s)); // 依次输出栈中元素并出栈
}
printf("\n");
return 0;
}
在这个示例中,我们定义了一个Stack
结构体来表示栈,其中包含一个整型数组data
用于存储栈元素,以及一个整型变量top
表示栈顶指针。initStack
函数用于初始化栈,isEmpty
和isFull
函数分别用于判断栈是否为空和已满,push
函数用于将元素入栈,pop
函数用于将元素出栈,peek
函数用于获取栈顶元素。在main
函数中,我们创建了一个栈并进行了一些基本的入栈、出栈和获取栈顶元素操作。
2.结果