开发者社区> (小唐同学)> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

栈的实际应用-后缀表达式与顺序表思考题

简介: 栈的实际应用-后缀表达式与顺序表思考题
+关注继续查看

  image.gif编辑

 作者简介:大家好我是小唐同学(๑>؂<๑),为梦想而奋斗的小唐,让我们一起加油!!!

image

image.gif编辑

个人主页:小唐同学(๑>؂<๑)的博客主页

系列专栏:数据结构

博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已经给大家附上链接,可以直接点击跳转:刷题点这里

牛客网支持ACM模式哦,刷算法题也很推荐哦!!!

下面上文章------》

目录

 

刷题网站图示:

栈的实际应用-后缀表达式:

用栈来计算后缀表达式思想:

用栈来计算后缀表达式代码:

顺序表思考题:

划重点:

顺序表思考题代码:


刷题网站图示:

imageimage.gif编辑

栈的实际应用-后缀表达式:

我们平常习惯所用为中缀表达式,举个例子:

中缀表达式:(a+b+c*d)/e

后缀表达式:abcd*++e/

用栈来计算后缀表达式思想:

遇到数值 直接入栈,遇到符号则出栈两个元素  扫描到'\0'结束(或者算出字符数组的长度限制循环)  最后返回栈低元素便是表达式的结果。

用栈来计算后缀表达式代码:

# include <stdio.h>
# include <string.h>
# define maxsize 100
int caozuo(int a,char op,int b)
{
    if(op=='*')
    return a*b;
    if(op=='+')
    return a+b;
    if(op=='-')
    return a-b;
    if(op=='/')
    {
        if(b==0)
        {
            printf("异常"); 
            return 0;//异常 
        }
        else
        return a/b; 
    }
}
int houzhui(char a[])
{
int st[maxsize];
int k,b,c,i;
char q;
int tope=-1;
int n=strlen(a);    
for(i=0;a[i]!='\0';i++)
{   
if(a[i]>='0'&&a[i]<='9')
{ 
//  tope;
    st[++tope]=a[i]-'0';
}
else
{   
     k=st[tope--];
     b=st[tope--];
    //出栈两个   
     q=a[i];
     
     c=caozuo(b,q,k);
++tope;
    st[tope]=c;
//printf("%d",);
}
}
return c; 
}
int main()
{
    char a[]="1221/++2/";
    int p=houzhui(a);
    printf("%d",p);
     return 0;
}

image.gif

顺序表思考题:

有N个个位正整数存放在int型数组A[0,…,N-1]中,N为已定义的常量且N≤9,数组A[]的长度为N,另给一个int型变量i,要求只用上述变量(A[0]~A[N-1]与i,这N+1个整型变量)写一个算法,找出这N个整数中的最小者,并且要求不能破坏数组A[]中的数据。

这道题之所以写出来是因为我觉得这道题特别有意思。

划重点:

个位正整数      (说明十位是空额,我们可以利用数十位来限制循环) 

只用上述变量(A[0]~A[N-1]与i,这N+1个整型变量

顺序表思考题代码:

# include <stdio.h>
int main()
{
    int a[5];
    for(int i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }
    int i=a[0];
    while(i/10<5)
    {
        if(i%10>a[i/10])
            {
                i=i-i%10;
                i=i+a[i/10];
            }
            i=i+10;
     } 
     i=i%10;
     printf("%d",i);
     return 0;
}

image.gif

今天一下午效率滴没有  只有这浅浅的菜菜的两道题。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
正则表达式(面试会考)
正则表达式(面试会考)
46 0
【从零开始的嵌入式生活】数据结构2——线性表及顺序表(1)
【从零开始的嵌入式生活】数据结构2——线性表及顺序表(1)
42 0
【PTA】后缀表达式计算
【PTA】后缀表达式计算
51 0
【蓝桥杯摆烂篇】蓝桥模拟赛【摆烂day3】
【蓝桥杯摆烂篇】蓝桥模拟赛【摆烂day3】
79 0
⑬云上场景:蜻蜓fm,基于ECS构建的转码集群
蜻蜓FM的转码集群采用多台ECS构建,通过SLB实现横向无限扩容的同时,亦可通过ECS自身的弹性特征依据业务需求实现纵向资源扩展。
3281 0
前缀中缀后缀表达式
它们都是对表达式的记法,它们之间的区别在于运算符相对于操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。 将中缀表达式转换为前缀表达式 (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2; (2) 从右至左扫描中缀表达式; (3) 遇到操作数时,将其压入S2; (4) 遇到运算符时,比较其与S1栈顶运算符的优先级: (4-1)
1112 0
+关注
(小唐同学)
保持学习,持续前进
55
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载