数据结构课设

A1

(1)问题定义

         表达式转换  

(2) 问题分析

    我们日常使用的算术表达式是采用中缀表示法。现在要设计程序,输入中缀表达式,转换为后缀表达式输出。

    中缀表示法的二元运算符位于两个运算数中间,而后缀表示法的二元运算符位于两个运算符之后。

    要实现此操作,需建立一个栈。遍历输入的中缀表达式,当:

1.字符为数字时

直接送入后缀表达式

2.字符为左括号时

入栈,并且优先级降至最低

3.字符为右括号时

直接出栈,将出栈的字符依次送入后缀表达式,直到栈顶为左括号,将左括号直接出栈,不送入表达式。

4.字符为运算符时

如果栈为空或者该字符的优先级大于栈顶,入栈。

否则,将栈内的字符依次送入后缀表达式,直到满足上述条件。

输入和输出的表达式都存储在数组中

(3)概要设计

数据结构设计

const int stacksize=20  //由题得输入的表达式不超20个字符

template <typename datatype> //定义模板类seqstack

class seqstack{ 

public:

seqstacck();  //初始化一个空栈 

void push(datatype x); //入栈操作

datatype pop(); //出栈操作

datatype gettop(); //取栈顶的元素

int empty();//判断栈是否为空

transformation(str,post)//转换

private:

datatype data[stacksize]; //存放栈元素的数组

int top; //栈顶元素在数组的下标

}

int main(){

char str[];

char post[];

cout<<.......<< //输入中缀表达式

getline(str) //将中缀表达式其存储在字符串变量 str 中

transformation(str,post)// 转换

cout<<........<< //输出后缀表达式

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值