【C语言_数据结构】栈

概念

栈 里面的内容可以是任意数据类型

遵循先入后出、FILO (firts input last ouput)

只能访问最顶层的数据,进行“入栈”和“出栈”

栈操作: 入栈 出栈 判断栈是否为空
需要一个指针,一直指向栈顶

image-20220829094129758

代码实现:

#include <stdio.h>
char stack[512];    //定义一个栈
int top = 0;        //栈顶的位置

void push(char c);
char pop(void);
int is_empty(void);

int main(void)
{
   
    char ss;
    push('a');
    push('b');
    push('c');
    while(!is_empty())
    {
   
        putchar(pop());		//输出c\n b\n a\n
        printf("\n");
    }
    return  0;
}

//入栈
void push(char c)
{
   
    stack[top++] = c;
}
//出栈
char pop (void)
{
   
    return stack[--top];
}
//判断是否为空 空为1 非空0
int is_empty(void)
{
   
    return top == 0;
}

栈的应用

1.逆波兰表示法:

12+ 34- *

中缀表示:(1+2)*(3-4) 处理步骤:

1入栈;

2入栈;

+连续两次出栈 相加结果入栈;

3入栈;

4入栈;

-连续两次出栈 相减结果入栈;

*连续两次出栈 相乘结果入栈 就是最终结果了(完美)

5*(((9+8)*(4*6))+7)人脑可以处理这样的括号,从而判断数据,但电脑就难了

所以用逆波兰表示法,

5(((9+8)*(4*6))+7)*

5((9+8)*(4*6))7+*

5(9+8)(4*6)*7+*

598+46**7+*

处理步骤:

5入栈;9入栈;8入栈;+连续两次出栈8 9 相加结果17入栈;

4入栈;6入栈;*连续两次出栈4 6 相乘24结果入栈;

*连续两次出栈17 24 相乘结果408入栈;

7入栈;+连续两次出栈408 7 相加结果415入栈;

*连续两次出栈5 415 相乘结果2075入栈 就是最终结果了;

代码实现:

#include <stdio.h>
#include <string.h>
int stack[512];    //定义一个栈
int top = 0;        //栈顶的位置

void push(int c);
int pop(void);
int is_empty(void);

int main(void)
{
      
    char a[100];
    int n,i,n1,n2;
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值