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

题目

假设以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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,032评论 0 5
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,759评论 0 38
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,164评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,899评论 0 4
  • 即刻下载APP,实时更新网贷新口子、新技术 点这里,立即申请 民生银行网页提额操作流程: 第一步,民生信用卡官网首...
    8a5736486905阅读 3,184评论 0 0

友情链接更多精彩内容