栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。 这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素; 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
代码语言:javascript复制#include <stdio.h>
#include <stdbool.h>
#define MaxSize 5
typedef struct {
int data[MaxSize];
int top;
} SqlStack;
/**
* 初始化栈
* @param stack
*/
void InitStack(SqlStack *stack) {
(*stack).top = -1;
}
/**
* 输入函数
* @return
*/
int GetInput() {
printf("请输入整数 n");
int temp;
scanf("%d", &temp);
return temp;
};
/**
* 入栈
* @param stack
* @return
*/
_Bool Push(SqlStack *stack) {
if ((*stack).top == MaxSize - 1) {
printf("栈已满 n");
return false;
}
(*stack).data[ (*stack).top] = GetInput();
return true;
}
/**
* 出栈
* @param stack
* @return
*/
_Bool Pop(SqlStack *stack) {
if ((*stack).top == -1) {
printf("栈已经到底了 n");
return false;
}
(*stack).data[(*stack).top--] = -1;
return true;
}
/**
* 判断是否空栈
* @param stack
* @return
*/
_Bool IsEmtpy(SqlStack *stack) {
if ((*stack).top == -1) {
printf("空栈 n");
return true;
}
printf("非空栈 n");
return false;
}
/**
* 获取栈顶元素
* @param stack
*/
void PrintStack(SqlStack *stack) {
printf("栈顶元素为%d n", (*stack).data[(*stack).top]);
}
int main() {
SqlStack stack;
InitStack(&stack);
IsEmtpy(&stack);
Push(&stack);
IsEmtpy(&stack);
PrintStack(&stack);
Push(&stack);
PrintStack(&stack);
Push(&stack);
PrintStack(&stack);
Push(&stack);
PrintStack(&stack);
Pop(&stack);
PrintStack(&stack);
Push(&stack);
PrintStack(&stack);
Push(&stack);
PrintStack(&stack);
return 0;
}