本人为编程小白,实验会有很多错误和不规范的地方,欢迎指出,仅供借鉴
本题不需要用到队列,笔者只是作为练习
一、实验目的
熟练掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。
理解栈在数据处理中扮演的角色,运用栈结构实现具体的应用。
二、实验内容
栈是数据结构中一个非常重要的结构。表达式计算是掌握程序设计语言的重要部分之一,也是栈的应用的一个典型例子。本次实验的主要内容是利用栈的基本操作,设计一个程序,实现用算符优先法对算术表达式求值的过程。对本设计系统实现+、-、*、/、%和乘方(^)运算。符合要求,同时提高自己的编程能力。实现算术表达式求值。
三、实验要求
1.认真阅读和掌握本实验的算法。
2.上机将本算法实现。
3.在程序的编写中尽量与专业的编程规范靠拢,系统代码采用结构化的编程方式,力求设计代码以及注释等规范,
4.保存和打印出程序的运行结果,并结合程序进行分析。
需求分析
本实验为用栈实现对算术表达式求值的功能。
输出的形式:直接输出结果
程序所能达到的功能:对含有±/%^的算术表达式求值
测试数据:
测试一:3+6/2%2^1-4
输出结果:0
测试二:5-6^2+5%76/2
输出结果:-16
测试三:3^2+6&2
输出结果:你输入了不符合要求的字符
概要设计
详细设计
伪代码:
·初始化栈
Void InitStack{
s.top = s.base;
s.stackSize = size;
}
·入栈
void push(stack<T> s,T e){
if(s.top-s.base>=stackSize)return error;
else{
s.top+=1;*(s.top)=e;
return OK;
}
}
·出栈,用e返回出栈元素
T pop(stack<T> s){
If(isEmpty(stack))return error;
Else{
T e = *(s.top);
s.top-=1;
return OK;}
·初始化队列
Void InitQueue(Queue q){
q.rear=q.front;}
·入队
Void enQueue(Queue q,char e){
p->date=e;
q.rear->next=p;
q.rear = p;}
·出队,用e返回出队元素
Char deQueue(Queue& q){
If(isEmpty(q))return error;
Else{
Char e = q.front->next->data;
q.front = q.front->next;
return OK;}
·主函数
Int main(){
Stack stack1,stack2;Queue queue;
InitStack(stack1);InitStack(stack2);InitQueue(queue);
String f;cin>>f;
For(int i=0;i<f.size();i++){
If(0<=f(i)<=9)enQueue;
Else if(f(i)=+||-