您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验题--判断入栈出栈操作序列是否合法

2013-09-17 17:06 225 查看
假设以I和O分别代表入栈和出栈操作,设计一个算法判断任一给定的栈操作序列是否合法。(例如:IOIOIIOOIO)

算法的设计思想:依次扫描出栈入栈操作序列,每扫描至一个位置,需检查出栈次数是否大于入栈次数,若大则非法。

扫描结束后,再检查出栈次数与入栈次数是否相等,若不相等,则非法。

C代码如下:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdbool.h>

char s[1000];

/*
* 判断一组入栈出栈操作序列是否合法的算法
*
**Tue Sep 17 2013 wuyudong <xueda120@gmail.com>
*/

/**
*Judge -  判断函数
*@str : 一组入栈出栈操作序列,默认为字符型
*
*/
bool Judge(char *str)
{
int i, I_count, O_count;
i = I_count = O_count = 0;

while (str[i] != '\0') {
switch (str[i]) {
case 'I':
I_count++;
break;
case 'O':
O_count++;
if (O_count > I_count) {
printf("序列非法!\n"); return false;
}
break;
default:
break;
}
i++;
}
if (I_count != O_count) {
printf("序列非法\n");
return false;
} else {
printf("序列合法\n");
return true;
}
}

int main()
{
while (gets(s)) {
Judge(s);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: