以I和O表示入栈和出栈操作,写一个C语言算法,判断其操作序列是否合法
时间: 2024-10-17 14:06:47 浏览: 39
给定进栈顺序,判断一个序列是否为正确的出栈顺序
4星 · 用户满意度95%
在C语言中,我们可以使用一个栈数据结构来模拟这种入栈(I)和出栈(O)的操作序列合法性检查。栈是一种遵循“后进先出”(LIFO,Last In First Out)原则的数据结构。如果所有的出栈操作都是对之前匹配的入栈操作的结果,那么操作序列就是合法的。
下面是一个简单的算法:
```c
#include <stdbool.h>
#include <stdio.h>
#define MAX_STACK_SIZE 50
typedef enum { IN = 'I', OUT = 'O'} Operation;
bool is_valid_sequence(char* sequence) {
stack_t operations[MAX_STACK_SIZE] = {0};
int top = -1;
for (int i = 0; sequence[i]; i++) {
if (sequence[i] == 'I') {
// 入栈
top++;
operations[top] = IN;
} else if (sequence[i] == 'O') {
// 出栈
if (top == -1 || operations[top] != IN) {
return false; // 如果栈为空或者当前不是I,则非法
}
top--;
}
}
// 检查栈是否空
return top == -1;
}
int main() {
char sequence[] = "IOIOI";
bool isValid = is_valid_sequence(sequence);
if (isValid) {
printf("The sequence is valid.\n");
} else {
printf("The sequence is invalid.\n");
}
return 0;
}
```
这个算法遍历输入序列,每遇到'I'就入栈,每遇到'O'就检查栈顶元素是否为'I',如果是则出栈,如果不是或者栈已空,则返回false表示序列无效。最后,如果整个序列遍历完后栈为空,说明所有'O'都有对应的'I',序列是合法的。
阅读全文