美文网首页
栈和队列算法设计题(二)

栈和队列算法设计题(二)

作者: 搬砖的猫 | 来源:发表于2019-11-01 11:06 被阅读0次

题目

假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作顺序可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。

算法思想

假定被判定的操作序列存入字符串数组中A中,从数组中的第一个元素开始对数组中的元素逐一进行判断,直到字符串末尾。如果当前字符为“I”,则入栈j次数增1,如果为“O”,则出栈次数增1.在判断过程中,如果出现k大于j,则序列非法,不比继续判断,返回false;在到达字符串末尾后,如果k不等于j,则序列非法,返回false;否则序列合法,返回true。

完整代码

#include <iostream>
#define MAXSIZE 100
using namespace std;

//假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作顺序可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。
//写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。 

bool Judge(char A[]){
    //判断A中的输入输出序列是否是合法序列。如果是,返回true,否则返回false
    int i = 0;                                     //i为下标 
    int j = 0;
    int k = 0;                                     //j和k分别为I和字母O的个数 
    while(A[i] != '\0'){                           //未到字符数组尾时判断序列是否合法 
        switch(A[i]){
            case 'I' :
                j ++;                              //入栈次数增1 
                break;
            case 'O' :
                k ++;
            if(k > j){
                cout << "序列非法" << endl;
                return false;
            }
        }
        i ++;                                      //不论A[i]是‘I’或‘O’,指针i均后移 
    }
    if(k != j){
        cout << "序列非法" << endl;
        return false;
    }
    else{
        cout << "序列合法" << endl;
        return true;
    }
}

int main(){
    char A[MAXSIZE];
    int n;
    cout << "Input the length:";
    cin >> n;
    cout << "Input the elements:" << endl;
    for(int i = 0; i < n; i ++){
        cin >> A[i];
    }
    Judge(A);
    return 0;
}

结果显示 TIM图片20191101110559.png

相关文章

  • 栈和队列算法设计题(二)

    题目 假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作顺序可表示为仅由I和O组成的序列,...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 栈和队列算法设计题(一)

    题目 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算...

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • 栈与队列算法题

    栈 当前位置的元素不能立刻计算,需要隔着一段距离去找另一个对应的元素。 单调栈问题: 42.接雨水 (hard)当...

  • 浅谈算法和数据结构

    注:采转归档,自己学习查询使用 浅谈算法和数据结构: 一 栈和队列浅谈算法和数据结构: 二 基本排序算法浅谈算法和...

  • 技能树

    技能树 程序设计 + 软件开发 程序设计 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计...

  • Swift 算法实战二(二叉树、二分搜索)

    Swift 算法实战一(集合,字典,链表,栈,队列等算法) Swift 算法实战二(二叉树、二分搜索) 前言 这是...

  • Swift 算法实战一(集合,字典,链表,栈,队列等算法)

    Swift 算法实战一(集合,字典,链表,栈,队列等算法) Swift 算法实战二(二叉树、二分搜索) 前言 用 ...

  • Java数据结构算法(五)排序

    算法这点粗略整理一下,后面完善 Java数据结构算法(一)链表 Java数据结构算法(二)栈和队列 Java数据结...

网友评论

      本文标题:栈和队列算法设计题(二)

      本文链接:https://www.haomeiwen.com/subject/tcrfbctx.html