c语言使用字母I和O分别表示PUSH和POP操作。堆栈的初始状态和结束状态都应为空,一个PUSH和POP操作序列仅由I和O组成的序列表示。这种序列只有在具有可操作性时才是合法的,否则就是非法的。写一个算法来判断下列序列是否合法。
时间: 2024-05-14 18:12:25 浏览: 119
c--stack-Operations:这是一个成熟的存储库,可实现堆栈的所有功能或操作,例如createStack(),push(),pop()和peek()
可以使用一个计数器来模拟堆栈的状态,当遇到字母I时,将计数器加1表示入栈,当遇到字母O时,将计数器减1表示出栈。如果计数器小于0,说明出现了非法的POP操作,如果计数器大于0,说明堆栈没有完全出栈,也是非法的。最后判断计数器是否为0即可。
具体实现如下:
```c
#include <stdio.h>
int main() {
char str[100];
int count = 0;
printf("请输入操作序列:");
scanf("%s", str);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == 'I') {
count++;
} else if (str[i] == 'O') {
count--;
}
if (count < 0) {
printf("非法操作序列\n");
return 0;
}
}
if (count == 0) {
printf("合法操作序列\n");
} else {
printf("非法操作序列\n");
}
return 0;
}
```
测试样例:
输入:IOIOIOI
输出:合法操作序列
输入:IOIIOO
输出:非法操作序列
阅读全文