假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。 (1)下面所示的序列中哪些是合法的? A.IOIIOIOO B.IOOIO

admin2019-08-01  23

问题 假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。
    (1)下面所示的序列中哪些是合法的?
       A.IOIIOIOO   B.IOOIOIIO    C.IIIOIOIO    D.IIIOOIOO
    (2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。

选项

答案(1)A和D是合法序列,B和C是非法序列。 (2)设被判定的操作序列已存入一维数组A中。 int Judge(charA[]){ //判断字符数组A中的输入/输出序列是否是合法序列。如是,返回true, //否则返回false int i=0: //i为下标 int j=k=O; //j和k分别为I和字母O的个数 while(A[i]!=‘\0’){ switch(A[i]){ case‘I’:j++;break;//入栈次数增1 case‘O’;k++;if(k>j){printf(“序列非法\n”);exit(0);} } i++; //不论A[i]是‘I’或‘O’,指针i均后移} if(j!=k){prjntf(“序列非法\n”);return(false);} else{printf(“序列合法\n”);return(true);} } } 提示:在入栈出栈序列(即由‘I’和‘O’组成的字符串)的任一位置,入栈次数(‘I’的个数)都必须大于等于出栈次数(即‘O’的个数),否则视作非法序列,立即给出信息,退出算法。整个序列(即读到字符数组中字符串的结束标记‘\O’),入栈次数必须等于出栈次数(题目中要求栈的初态和终态都为空),否则视为非法序列。

解析
转载请注明原文地址:https://jikaoti.com/ti/XAGjFFFM
0

最新回复(0)