#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 100 // 定义栈的最大容量
// 顺序栈的结构体定义
typedef struct {
int data[MAXSIZE]; // 存储元素的数组
int top; // 栈顶指针,初始化为-1表示空栈
} SqStack;
// 初始化栈
void InitStack(SqStack *s) {
s->top = -1;
}
// 判断栈是否为空
bool IsEmpty(SqStack *s) {
return s->top == -1;
}
// 入栈操作
bool Push(SqStack *s, int e) {
if (s->top == MAXSIZE - 1) { // 栈满
printf("栈满了\n");
return false;
}
s->data[++(s->top)] = e; // 先移动指针再赋值
// // 先移动栈顶指针
// s->top++;
// // 然后将元素e赋值到栈顶位置
// s->data[s->top] = e;
return true;
}
// 出栈操作
bool Pop(SqStack *s, int *e) {
if (IsEmpty(s)) { // 栈空
return false;
}
*e = s->data[(s->top)--]; // 先赋值再移动指针
// // 先赋值给 e
// *e = s->data[s->top];
//
// // 然后减少栈顶指针
// s->top--;
return true;
}
// 取栈顶元素
bool GetTop(SqStack *s, int *e) {
if (IsEmpty(s)) { // 栈空
return false;
}
*e = s->data[s->top];
return true;
}
// 测试代码
int main() {
// 声明一个栈
SqStack s;
// 初始化栈
InitStack(&s);
// 入栈几个元素
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
// 判断栈是否为空
if (IsEmpty(&s)) {
printf("栈空\n");
} else {
printf("栈不空\n");
}
// 取栈顶元素
int topElement;
if (GetTop(&s, &topElement)) {
printf("栈顶元素是: %d\n", topElement);
}
// 出栈一个元素
int poppedElement;
if (Pop(&s, &poppedElement)) {
printf("出栈的元素是: %d\n", poppedElement);
}
// 出栈第二个元素
int poppedElement2;
if (Pop(&s, &poppedElement2)) {
printf("出栈的元素是: %d\n", poppedElement2);
}
return 0;
}
运行结果: