Responsive image

问题 F: 第6关:基于栈的可操作判断

问题 F: 第6关:基于栈的可操作判断

时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 12
[提交][状态][讨论版][命题人:]

题目描述

本关任务:假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。
#include <iostream>

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW - 2
using namespace std;
typedef struct {
  char * base;
  char * top;
  int stacksize;
}
SqStack;
int InitStack(SqStack & S) { //初始化栈
  S.base = new char[MAXSIZE];
  if (!S.base) return OVERFLOW;
  S.top = S.base;
  S.stacksize = MAXSIZE;
  return OK;
}
int Push(SqStack & S) { //入栈
  S.top++;
  return OK;
}
int Pop(SqStack & S) { //出栈
  S.top--;
  return OK;
}
int IsEmpty(SqStack S) { //判断栈是否为空,空返回1,否则返回0
  return S.top == S.base;
}
bool Judge(char a[], SqStack & S) { //栈的可操作判断
  /**************begin************/
  


  /**************end************/
}
int main() {
  char a[100];
  while (cin >> a) {
    if (a[0] == '0') break;
    SqStack op;
    InitStack(op);
    if (Judge(a, op)) cout << "TRUE" << endl;
    else cout << "FALSE" << endl;
  }
  return 0;
}



输入描述

多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。

输出描述

多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。

样例输入

IOIOIO
IIOOOO
0

样例输出

TRUE
FALSE

提示


组合提交代码,你仅需要提交





bool Judge(char a[], SqStack & S) { //栈的可操作判断


  /**************begin************/


  








  /**************end************/


}




[提交][状态]
ACM算法攻关部
  • Anything about this OnlineJudge, Please Contact Administrator. Click add QQ

    OJ system based on HUSTOJ Project , UI based on Twitter Bootstrap

    Copyright 2016 ACM算法攻关部
    关于网站改版