栈的实际应用-后缀表达式与顺序表思考题
编辑
作者简介:大家好我是小唐同学(๑><๑),为梦想而奋斗的小唐,让我们一起加油!!!
![]()
编辑
个人主页:小唐同学(๑><๑)的博客主页
系列专栏:数据结构
博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已经给大家附上链接,可以直接点击跳转:刷题点这里
牛客网支持ACM模式哦,刷算法题也很推荐哦!!!
下面上文章------》
编辑
目录
刷题网站图示:
编辑
栈的实际应用-后缀表达式:
我们平常习惯所用为中缀表达式,举个例子:
中缀表达式:(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; }
顺序表思考题:
有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; }
今天一下午效率滴没有 只有这浅浅的菜菜的两道题。