C语言第十天-------------------一个标准且最简单的栈

栈:元素存取的操作是一种FILO(先进后出/后进先出)的操作,每次进/取栈只能操作一个元素

应用:恢复/撤销
栈:一口井
栈顶:能被操作(进、出)的一端
栈底:不能被操作的一端

顺序栈:容器是一个数组

栈的操作:
1、栈满 条件: top== N-1
IsFull
2、栈空 条件:top==-1 (数组从下标为0开始可以存值)
IsEmpty
3、出栈
pop
4、进栈
push
5、取次栈顶
Stacktop()
6、栈长度 :
StackLength
7、初始化栈
InitStack
8、遍历栈:
StackList

#include<stdio.h>
struct Stack
{
    int buf[10];
    int top;
};
void InitStack(struct Stack* pcs)//初始化,指向-1。
{
    pcs->top=-1;
}
int IsFull(struct Stack* pcs)
{
    if(pcs->top+1==10)
            return 1;
    else
            return 0;
}
int IsEmpty(struct Stack* pcs)
{
    if(pcs->top==-1)
            return 1;
    else
            return 0;
}
int pop(struct Stack* pcs,int* k)//出栈
{
    if(IsEmpty(pcs)==0)
    {
            *k=pcs->buf[pcs->top];
            pcs->top=pcs->top-1;
            return 1;
    }
    else
            return 0;
}
int push(struct Stack* pcs,int k)//进栈
{
    if(IsFull(pcs)==0)
    {
            pcs->top=pcs->top+1;//这里跟队不一样,要先加在赋值。
            pcs->buf[pcs->top]=k;
            return 1;
    }
    else
            return 0;
}
int main()
{
    struct Stack cs;
    InitStack(&cs);
    push(&cs,1);
    push(&cs,2);
    push(&cs,3);
    push(&cs,4);
    push(&cs,5);
    push(&cs,6);
    push(&cs,7);
    push(&cs,8);
    push(&cs,9);
    push(&cs,10);
    push(&cs,11);//测试能不能判断栈满,实际没存进去。
    int k;
    while(pop(&cs,&k)==1)
    {
            printf("当前出栈的是%d,栈内剩余%d个元素\n",k,cs.top+1);
            sleep(3);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值