栈的基本使用

栈的基本使用

栈是一种基于后进先出(LIFO)原则的数据结构。它类似于一叠盘子,只能在顶部进行操作。栈有两个主要操作:

入栈(Push): 将元素放置在栈顶。
出栈(Pop): 从栈顶移除元素。

除了上述两个基本操作,栈还可能支持其他操作,如:

查看栈顶元素(Peek): 查看但不移除栈顶的元素。
判空(isEmpty): 检查栈是否为空。
获取栈的大小(Size): 返回栈中元素的数量。 栈常常用于需要“后进先出”处理方式的场景,如函数调用、表达式求值、浏览器历史记录等。

具体实现如下

//栈的基本使用
#include<stdio.h>
#include<stdlib.h>

#define MAX_SIZE 100 //栈的最大容量

//栈结构体定义
struct Stack{
    int items[MAX_SIZE];
    int top;

};

//初始化栈
void initializeStack(struct  Stack*stack){
    stack->top=-1;
}

//判断栈是否为空
int isEmpty(struct Stack*stack ){
    return (stack->top==-1);
}

//判断栈是否已满
int isFull(struct Stack *stack){
    return(stack->top==MAX_SIZE-1);
}

//向栈中添加元素(入栈)
void push(struct Stack*stack,int value){
    if(isFull(stack)){
        printf("栈已满,无法插入元素\n");
        return ;
    }
    stack->items[++(stack->top)]=value ;
}

//从栈中删除元素(出栈)
int pop(struct Stack*stack){
    if(isEmpty(stack)){
        printf("栈已空,无法删除元素\n");
        return -1;
    }
     return stack->items[(stack->top)--];
}


//清空栈
void clearStack(struct Stack *stack){
    stack->top=-1;
}


//销毁栈
void destroyStack(struct Stack*stack){
    free(stack);
}

//求栈的长度
int stackLength(struct Stack*stack){
    return (stack->top+1);
}

int main(){
    struct Stack*myStack=(struct Stack*)malloc(sizeof(struct Stack));
    if(myStack==NULL){
        printf("内存分配失败");
        return -1;
    }
    initializeStack(myStack);
    push(myStack,10);
    push(myStack,20);
    push(myStack,30);
    push(myStack,40);

    printf("栈的长度为:%d\n",stackLength(myStack));
    printf("删除栈顶元素%d\n",pop(myStack));
    printf("删除栈顶元素%d\n",pop(myStack));

    clearStack(myStack);
    printf("清除栈后,栈的长度为:%d\n",stackLength(myStack));

    destroyStack(myStack);

    return 0;
}

运行效果
在这里插入图片描述

感谢阅读,跳段街舞感谢一下ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值