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

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

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

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

C代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<ctype.h>
 5 #include<stdbool.h>
 6 
 7 char s[1000];
 8 
 9 /*
10  * 判断一组入栈出栈操作序列是否合法的算法
11  *
12  **Tue Sep 17 2013 wuyudong <xueda120@gmail.com>
13 */
14 
15 /**
16  *Judge -  判断函数
17  *@str : 一组入栈出栈操作序列,默认为字符型
18  *
19 */
20 bool Judge(char *str)
21 {
22     int i, I_count, O_count; 
23     i = I_count = O_count = 0;
24 
25     while (str[i] != '\0') {
26         switch (str[i]) {
27         case 'I': 
28             I_count++;
29             break;
30         case 'O':
31             O_count++;
32             if (O_count > I_count) {
33                 printf("序列非法!\n"); return false;
34             }
35             break;
36         default:
37             break;
38         }
39         i++;
40     }
41     if (I_count != O_count) {
42         printf("序列非法\n");
43         return false;
44     } else {
45         printf("序列合法\n");
46         return true;
47     }
48 }
49 
50 int main()
51 {
52     while (gets(s)) {
53         Judge(s);
54     }
55     return 0;    
56 }
作者:cpoint
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/cpoint/p/3367333.html