c语言模拟实现栈

1何为栈

2出栈与入栈

在这里插入图片描述

字义
栈顶进行数据的插入与删除的一端叫栈顶
栈尾未进行数据的插入与删除的一端叫栈尾
压栈栈的插入操作叫入栈/压栈/进栈
出栈栈的删除(注意:栈的删除也是从顶部开始的)
  • 栈的进入如下面mp4所示

(最上面为栈顶)

进栈:

模拟实现栈

出栈:

<一直没审核完毕>

  • 接下来我们通过代码模拟实现栈

                            -.- 模拟 ^0^
    
序号模拟执行内容
1栈的初始化
2入栈
3出栈
4获取栈顶元素
5计数元素个数
6检查栈是否为空
7销毁栈

在进行代码我们先创建结构体

typedef int STDataType;
typedef struct stack
{
STDataType
a;
int top;//栈顶间接性计数
int capacity;
*
}stack;

  • 1.//初始化
    void Stack_Init(stack* pz)
    {
    assert(pz);
    pz->a = NULL;
    pz->capacity = 0;
    pz->top = 0;

}

  • 2.`//入栈

void Stack_Push(stack* ps, STDataType nb)
{
assert(ps);
if (ps->top == ps->capacity)
{
int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
ps->a=(STDataType*) realloc(ps->a,newcapacity*sizeof(STDataType));
if (ps->a == NULL)
{
printf(“realloc fail\n”);
exit(-1);
}
ps->capacity = newcapacity;
}
ps->a[ps->top] = nb;
ps->top++;
}`

  • 3.//出栈
    void Stack_Pop(stack* pz)
    {
    assert(pz);
    assert(pz->top>0);
    –pz->top;
    }

  • 4.//获取栈顶元素
    STDataType Stack_Top(stack* pz)
    {
    assert(pz);
    assert(pz->top > 0);
    return pz->a[pz->top-1];
    }

  • 5.//获取的个数
    int Stack_Size(stack* pz)
    {
    assert(pz);
    return pz->top;
    }

  • 6.//检查是否为空为空返回0不为空返回结果
    bool Stack_Empty(stack* pz)
    {
    assert(pz);
    /if (pz->top > 0)
    {
    return pz->top;
    }
    else
    {
    return 0;
    }
    /

    //top等于0为真
    //不等于0为假
    return pz->top == 0;
    }

  • 7.//销毁
    void Stack_Destroy(stack* pz)
    {
    assert(pz);
    free(pz->a);
    pz->a = NULL;
    pz->capacity = 0;
    pz->top = 0;

}

^ 0 ^
– 0 – 最终达到的效果如图.
在这里插入图片描述

总结:

—今天用的编辑器不习惯然后那个视频自己刚刚会弄不太熟练,不是特别好看,所以大家希望别建议,我会慢慢的提高自己。
— 栈的学习感觉比链表会更抽象的感觉。
— 变强的路很累。
— 让我们大家一起进步吧。

  • 29
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华华的bit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值