栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。
这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
#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; }