3.5判断出栈和入栈操作序列是否合法
2016-06-05 20:29
274 查看
题目描述:
假设以I和O分别表示入栈和出栈操作,栈的初试状态和终态都是空,出栈和入栈序列仅有I和O组成。
称可以操作的序列为合法序列,否则为非法序列。
写一个算法判断一个给定的序列是否合法。若合法返回True,否则返回false.
题目分析:
一个由出栈操作和入栈操作组成的序列,要是合法序列应该满足:
1.入栈的操作次数大于等于出栈操作的次数;
2.当遇到每个出栈操作时,判断入栈操作的次数是否大于等于出栈操作的次数。因为每个出栈操作的状态下,入栈操作的次数一定不小于出栈操作的次数。
int Judge(char str[]){
int i=0;
int countI;//入栈操作的次数
int countO;//出栈操作的次数
countI=countO=0;
while(str[i]!='\0'){
switch(str[i]){
case 'I':
countI++;
break;
case 'O'://当遇到出栈操作时,要判断这个状态下入栈的次数是否大于
//出栈的次数
countO++;
if(countO>countI){
printf("序列非法!\n");
return false;
}
}
i++;//无论出栈还是入栈,指针都要后移
if(countI>=countO){
printf("序列合法.\n");
return true;
}
}
}
int Judge2(char str[]){
int i=0;
int countI;
int countO;
int len;
len=strlen(str);
countI=countO=0;
for(i=0;i<len;){
if(str[i]=='I'){
countI++;
i++;//记得指针后移
}else{
if(str[i]=='O'){
countO++;
i++;//记得指针后移
if(countO>countI){
printf("操作序列非法..\n");
return false;
}
}
}
}
if(countI>=countO){
printf("操作序列合法!!!\n");
return true;
}
}
假设以I和O分别表示入栈和出栈操作,栈的初试状态和终态都是空,出栈和入栈序列仅有I和O组成。
称可以操作的序列为合法序列,否则为非法序列。
写一个算法判断一个给定的序列是否合法。若合法返回True,否则返回false.
题目分析:
一个由出栈操作和入栈操作组成的序列,要是合法序列应该满足:
1.入栈的操作次数大于等于出栈操作的次数;
2.当遇到每个出栈操作时,判断入栈操作的次数是否大于等于出栈操作的次数。因为每个出栈操作的状态下,入栈操作的次数一定不小于出栈操作的次数。
int Judge(char str[]){
int i=0;
int countI;//入栈操作的次数
int countO;//出栈操作的次数
countI=countO=0;
while(str[i]!='\0'){
switch(str[i]){
case 'I':
countI++;
break;
case 'O'://当遇到出栈操作时,要判断这个状态下入栈的次数是否大于
//出栈的次数
countO++;
if(countO>countI){
printf("序列非法!\n");
return false;
}
}
i++;//无论出栈还是入栈,指针都要后移
if(countI>=countO){
printf("序列合法.\n");
return true;
}
}
}
int Judge2(char str[]){
int i=0;
int countI;
int countO;
int len;
len=strlen(str);
countI=countO=0;
for(i=0;i<len;){
if(str[i]=='I'){
countI++;
i++;//记得指针后移
}else{
if(str[i]=='O'){
countO++;
i++;//记得指针后移
if(countO>countI){
printf("操作序列非法..\n");
return false;
}
}
}
}
if(countI>=countO){
printf("操作序列合法!!!\n");
return true;
}
}
相关文章推荐
- Google I/0 2016 Highlights
- 团队作业之个人总结篇
- nth_element()方法总结
- 如何在博客中添加背景音乐(博客园必须获得脚本权限)
- 对canvas arc()中counterclockwise参数的一些误解
- java加解密操作过程中的中文乱码问题
- 适合程序员的画图技法
- C#可扩展编程之MEF(三):导出类的方法和属性
- 适合程序员的画图技法
- 开放GitHub的理由
- jeecg 按条件查询
- String和StringBuffer、ArrayList和LinkedList、HashMap和HashTable的特点及区别。
- 排序算法
- 把m升水倒入n个桶中,可以有桶为空,问有多少种倒法
- 百度地图API android studio中不显示地图只显示网格线的问题
- uvalive 3027 Corporative Network(并查集)
- 将字符串长度进行剪切
- Tomcat——配置详解
- AngularJS 使用绑定和模板指令
- jQuery-AJAX