码迷,mamicode.com
首页 > 其他好文 > 详细

博客作业03--栈和队列

时间:2018-04-15 12:10:17      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:false   compute   info   mat   c++   设计   cst   优点   2.3   

1.学习总结

技术分享图片

2.PTA实验作业

2.1 题目1: 银行业务队列简单模拟

2.2 设计思路:

2.3 代码截图:

技术分享图片

技术分享图片

2.4 PTA提交列表说明

技术分享图片

2.1 题目2:jmu-报数游戏

2.2 设计思路:

2.3 代码截图:

技术分享图片

2.4 PTA提交列表说明

技术分享图片

2.1 题目3:银行排队问题之单队列多窗口服务

2.2 设计思路:

2.3 代码截图:

技术分享图片

2.4 PTA提交列表说明

技术分享图片

3.截图本周题目集的PTA最后排名

3.1 栈PTA排名

技术分享图片

3.2 队列PTA排名

技术分享图片

4. 阅读代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cmath>

using namespace std;

char s[1000];
int  i;  

double Translation(int & i)
{
    double integer = 0.0;  
    double remainder = 0.0;  

    while (s[i] >= ‘0‘ && s[i] <= ‘9‘)
    {
        integer *= 10;
        integer += (s[i] - ‘0‘);
        i++;
    }

    if (s[i] == ‘.‘)
    {
        i++;
        int c = 1;
        while (s[i] >= ‘0‘ && s[i] <= ‘9‘)
        {
            double t = s[i] - ‘0‘;
            t *= pow(0.1, c);
            c++;
            remainder += t;
            i++;
        }
    }

    return integer + remainder;
}


int GetLevel(char ch)
{
    switch (ch)
    {
    case ‘+‘:
    case ‘-‘:
        return 1;
    case ‘*‘:
    case ‘/‘:
        return 2;
    case ‘(‘:
        return 0;
    case ‘#‘:
        return -1;
    };
}


double Operate(double a1, char op, double a2)
{
    switch (op)
    {
    case ‘+‘:
        return a1 + a2;
    case ‘-‘:
        return a1 - a2;
    case ‘*‘:
        return a1 * a2;
    case ‘/‘:
        return a1 / a2;
    };
}


double Compute()
{
    stack<char> optr;    
    stack<double> opnd;  

    optr.push(‘#‘);
    int len = strlen(s);
    bool is_minus = true;  

    for (i = 0; i < len;)
    {
        
        if (s[i] == ‘-‘ && is_minus)  
        {
            opnd.push(0);
            optr.push(‘-‘);
            i++;
        }
       
        else if (s[i] == ‘)‘)
        {
            is_minus = false;
            i++;

            while (optr.top() != ‘(‘)
            {
                double a2 = opnd.top();
                opnd.pop();
                double a1 = opnd.top();
                opnd.pop();
                char op = optr.top();
                optr.pop();

                double result = Operate(a1, op, a2);
                opnd.push(result);
            }

            optr.pop(); 
        }
        
        else if (s[i] >= ‘0‘ && s[i] <= ‘9‘)
        {
            is_minus = false;
            opnd.push(Translation(i));
        }
        
        else if (s[i] == ‘(‘)
        {
            is_minus = true;
            optr.push(s[i]);
            i++;
        }
        
        else
        {
            while (GetLevel(s[i]) <= GetLevel(optr.top()))
            {
                double a2 = opnd.top();
                opnd.pop();
                double a1 = opnd.top();
                opnd.pop();
                char op = optr.top();
                optr.pop();

                double result = Operate(a1, op, a2);
                opnd.push(result);
            }

            optr.push(s[i]);
            i++;
        }
    }

    while (optr.top() != ‘#‘)
    {
        double a2 = opnd.top();
        opnd.pop();
        double a1 = opnd.top();
        opnd.pop();
        char op = optr.top();
        optr.pop();

        double result = Operate(a1, op, a2);
        opnd.push(result);
    }

    return opnd.top();
}

int main()
{
    while (cin >> s)
        cout << "结果为:" << Compute()<< endl << endl;
}

这段代码的功能是进行四则运算,优点:将部分运算符优先级用数字表示,便于比较字符优先级。
地址:https://gitee.com/adressad/codes/9ystlgoh6b413n5vfupa839

. 代码Git提交记录截图

技术分享图片

博客作业03--栈和队列

标签:false   compute   info   mat   c++   设计   cst   优点   2.3   

原文地址:https://www.cnblogs.com/linyiwei/p/8836324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!