假设以I和O分别表示入栈和出栈操作,栈的初态和终态均为空,进栈和出栈的操作序列可表示为仅由I和O组成的序列。15
(1)下面所示的序列中哪些是合法的?
A.IOIIOIOO B.IOOIOIIO C.IIIOIOIO D.IIIOOIOO
(2)通过对(1)的分析,写出一个算法判定所给的操作序列是否合法。若合法返回true;否则返回false(假设被判定的操作序列已存入一维数组中)。
(1)A、C、D
(2)
#include <iostream>
using namespace std;
bool LegalOrNot(char data[8]) {
int n = 0;
for (int i = 0; i < 8; i++) {
if (data[i] == 'I') {
n++;
}
if (data[i] == 'O') {
n--;
}
if (n < 0) {
return false;
}
}
return true;
}
int main(int argc, char* argv[]) {
char data[8] = { 'I','O','O','I','O','I','I','O' };
bool n = LegalOrNot(data);
cout << boolalpha;
cout << n;
}