数据结构 栈Stack的理解与C语言实现

栈,通俗的理解是叠盘子,如我们吃完饭洗碗洗盘子时,设盘子大小形状一样的,那么可以顺利的叠成一竖,每次我们洗好一个就叠在最上面push top,需要取用时候为了方便也是取最上面pop top,当然我们可以整个搬下来取最下面那个但有可能摔破了盘子。

另外,我们需要设定盘子最高可以叠多高isFull,判断如果超高了满了就不要叠了否则也是容易摔破盘子,也需要设定取盘子时,至少要有一个盘子才成功取到not isEmpty,于是就有了如下的函数:

typedef struct Stack{

int a[9]; //假定我们最高可以叠9个盘子,相应为第0号位~第8号位

int top; //top作为数组下标,标注目前的取盘子处

}Stack;

void initStack(Stack*stack){

stack->top = -1; //初始化时将下标设在第-1号位,表示无盘子

}

int isFull(Stack*stack){

return stack->top == 8; //当下标指在了第8号位,等同于放不下新盘子了

}

int isEmpty(Stack*stack){

return stack->top == -1; //无盘子

}

void push(Stack*stack, int value){

if(!isFull(stack)){

stack->top++;

stack->a[stack->top] = value;

}

}

int pop(Stack*stack){

if(!isEmpty(stack)){

return stack->a[stack->top--];

}

}

int main(){

Stack a;

initStack(&a);

push(&a,1);

push(&a,2);

for(int i = 0; i<2; i++){

printf("%d ",pop(&a)); //测试结果,倒序输出

}

return 0;

}

相关推荐
Dillon Dong几秒前
机侧同步定子电压环的PI整定:从“对齐三个量“到“闭环四步法“
算法·变流器·风电控制·dfig
Languorous.6 分钟前
C++数据结构进阶|图(Graph)详解:从存储到面试高频算法实战
算法
时空自由民.6 分钟前
C/C++ volatile关键字原理及应用介绍
java·c语言·c++
我头发还没掉光~9 分钟前
P4147 玉蟾宫
数据结构·c++·算法
枕星而眠19 分钟前
栈(Stack)与队列(Queue)核心知识总结
c语言·数据结构·后端·链表
江汉似年42 分钟前
强化学习中的 On-policy 与 Off-policy 全面解析
人工智能·深度学习·算法·rl
谙弆悕博士1 小时前
【附C语言源码】从零实现命令行贪吃蛇游戏
c语言·开发语言·学习·游戏·游戏程序·小游戏·贪吃蛇
code bean1 小时前
【LangChain 】 自定义解析器实战指南:从原理到 10 个业务场景落地
算法·langchain
Little At Air1 小时前
LinuxOS阻塞队列模型(单生产者单消费者)
linux·数据结构·c++
念恒123061 小时前
基础IO(一切皆文件)
linux·c语言·c++·算法