![](https://csdnimg.cn/release/download_crawler_static/87339033/bg8.jpg)
temp=Pop (&s);
if( temp!=S[i]) return 0 ;// 不等则返回 0
else i++;
}
return 1 ; // 比较完毕均相等则返回 1
}
(3)设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输
入的整数,当 ai≠-1 时,将 ai 进栈;当 ai=-1 时,输出栈顶整数并出栈。算法应对异常情况(
入栈满等)给出相应的信息。
[算法描述]
#define maxsize 栈空间容量
void InOutS(int s[maxsize])
//s 是元素为整数的栈,本算法进行入栈和退栈操作。
{int top=0; //top 为栈顶指针,定义 top=0 时为栈空。
for(i=1; i<=n; i++) //n 个整数序列作处理。
{cin>>x); //从键盘读入整数序列。
if(x!=-1) // 读入的整数不等于-1 时入栈。
{if(topmaxsize-1){cout<<“栈满”<<endl;exit(0);}
else s[++top]=x; //x 入栈。
}
else //读入的整数等于-1 时退栈。
{if(top0){ cout<<“栈空”<<endl;exit(0);}
else cout<<“出栈元素是”<< s[top–]<<endl;}
}
}//算法结束。
(4)从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的
长度不超过一行,以 符 作 为 输 入 结 束 , 操 作 数 之 间 用 空 格 分 隔 , 操 作
符 只 可 能 有 + 、 − 、 ∗ 、 / 四 种 运 算 。 例 如 : 23434 + 2 ∗ 符作为输入结
束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2* 符作为
输入结束,操作数之间用空格分隔,操作符只可能有+、−、∗、/四种运算。例如:23434+2∗。
[题目分析]
逆波兰表达式(即后缀表达式)求值规则如下:设立运算数栈 OPND,对表达式从左到右扫描(读
入),当表达式中扫描到数时,压入 OPND 栈。当扫描到运算符时,从 OPND 退出两个数,
进行相应运算,结果再压入 OPND 栈。这个过程一直进行到读出表达式结束符 , 这 时 O
P N D 栈 中 只 有 一 个 数 , 就 是 结 果 。 [ 算 法 描 述 ] f l o a t e x p r ( ) / / 从
键 盘 输 入 逆 波 兰 表 达 式 , 以 ‘ ,这时 OPND 栈中只有一个数,就是结果。 [算
法描述] float expr( ) //从键盘输入逆波兰表达式,以‘ ,这时 OPND 栈中只有一个数,就是结
果。[算法描述]floatexpr()//从键盘输入逆波兰表达式,以‘’表示输入结束,本算法求逆波兰
式表达式的值。
{float OPND[30]; // OPND 是操作数栈。
init(OPND); //两栈初始化。
float num=0.0; //数字初始化。