数据结构笔记(四)顺序表实现栈

#include<stdio.h>

#include<stdlib.h>

//栈,又叫堆栈,是只能在表尾插入删除的线性表

//先进后出

typedef int E;

//起个栈名

typedef struct Stack* ArrStack;

struct Stack {

    E* array;

    int capacity;//栈的长度

    int top;//使用top来表示当前栈顶位置,存的是栈顶元素的下标

};

//创建栈

//变量栈指针

int initStack(ArrStack stack)

{

    stack->capacity=10;

    stack->array=malloc(sizeof(E)*stack->capacity);

    if(stack->array==NULL)

    {

        //申请失败

        return 0;

    }

    stack->top=-1;//没有元素默认负一

    return 1;

    

}

//入栈

//变量栈指针,入栈元素

int pushStack(ArrStack stack,E element)

{

    stack->top++;

    if(stack->top==stack->capacity)

    {

        int NewCapacity = stack->capacity+(stack->capacity)>>1;

        ArrStack stack1 = realloc(stack->array,sizeof(E)*NewCapacity);

        if(stack1!=NULL)

        {

            stack->array=stack1;

            stack->capacity=NewCapacity;

        }

        else

        {

            return 0;

        }

    }

    stack->array[stack->top]=element;

    stack->capacity++;

    return 1;

}

//判断栈是否为空

//变量栈指针

int isEmpty(ArrStack stack)

{

    if(stack->top!=-1)

    {

        return 1;

    }

    else

    {

        return 0;

    }

}

//出栈

//变量栈指针

E popStack(ArrStack stack)

{

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

}

int main()

{

    struct Stack stack;

    initStack(&stack);

    for(int i = 1;i<10;i++)

    {

        pushStack(&stack,i*100);

        printf("%d\n",stack.array[stack.top]);

        popStack(&stack);

        printf("%d\n",stack.array[stack.top]);

    }

    

    return 0;

}

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值