ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

栈与队列的应用

2021-08-26 20:31:59  阅读:142  来源: 互联网

标签:case q2 括号 队列 QueueEmpty break ++ 应用


1.栈在括号匹配中的应用

算法的思想如下:
1)初始设置一个空栈,顺序读入括号。
2)若是右括号,则或者使置于栈顶的最急迫期待得以消解,或者是不合法的情况(括号序列不匹配,退出程序)。
3)若是左括号,则作为一个新的更急迫的期待压入栈中, 自然使原有的在栈中的所有未消解的期待的急迫性降了一级。算法结束时,栈为空,否则括号序列不匹配。

假设一个算术表达式中包含了圆括号,方括号喝花括号3中类型的括号,编写一个算法来判别表达式中的酷哦哦好是否平日对,以字符“\0”作为算术表达式的结束符。

//检测括号
bool BracketsCheck(char* str) {
    InitStack(S);
    int i = 0;
    while (str[i] != '\0') {
        switch (str[i]) {
        case '(':Push(S, '('); break;
        case '[':Push(S, '['); break;
        case '{':Push(S, '{'); break;
        case ')':Pop(S, e);
            if (e != '(') return false;
        break;
        case ']':Pop(S, e);
            if (e != '[') return false;
        break;
        case '}':Pop(S, e);
            if (e != '{') return false;
        break;
        default: break;
        }
        i++;
    }
    if (!IsEmpty(S)) {
        cout << "括号不匹配" << endl;
        return false;
    }
    else {
        cout << "括号匹配" << endl;
        return true;
    }
}

2.按铁道进行车厢调度(注意,两侧铁道均为单向行驶道,火车调度站有一个月于调度的“栈道”),火车调度站的入口处有n节硬座和软座车厢(分别用H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列以使所有的软座车厢都被调整到硬座车厢之前。

void Train_Arrange(char* train) {
    char* p = train, * q = train, c;
    stack s;
    InitStack(s);
    while (*p) {
        if (*p == 'H')
            Push(s, *p);
        else
            *(q++) = *p;
        p++;
    }
    while (!StackEmpty(s)) {
        Pop(s, c);
        *(q++) = c;
    }
}

4.某汽车轮渡口,过江渡船每次能载10辆车过江。过江车辆分为客车类和货车类,上渡船有如下规定:同类车先到先上船;客车先于货车上船,且每上4辆客车,才允许放上1辆货车;若等待客车不足4辆,则以货车代替;若无货车等待,允许客车都上船。试设计一个算法模拟渡口管理。

Queue q;  //过江渡船队列
Queue q1;   // 客车队列
Queue q2;    //货车队列
void manager() {
    int i = 0, j = 0;
    while (j < 10) {
        if (!QueueEmpty(q1) && i < 4) {
            DeQueue(q1, x);
            EnQueue(q, x);
            i++;
            j++;
        }
        else(i == 4 && !QueueEmpty(q2)) {
            DeQueue(q2, x);
            EnQueue(q, x);
            i = 0;
            j++;
        }
        else {  //客车队列为空
            while (j < 10 && i < 4 && !QueueEmpty(q2)) {
                DeQueue(q2, x);
                EnQueue(q, x);
                i++;
                j++;
            }
            i = 0;
        }
        if (QueueEmpty(q1) && QueueEmpty(q2)) {  //加起来不足10辆,提前结束循环
            j = 12;
        }
    }
}

 

标签:case,q2,括号,队列,QueueEmpty,break,++,应用
来源: https://www.cnblogs.com/a-runner/p/15191392.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有