zoukankan      html  css  js  c++  java
  • 数据结构实验题判断入栈出栈操作序列是否合法

    假设以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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    [剑指 Offer 18. 删除链表的节点]
    [922. 按奇偶排序数组 II]
    [905. 按奇偶排序数组]
    Linux信号机制
    [1470. 重新排列数组]
    linux常用命令全称
    pidof查看服务的PID
    运行shell脚本提示syntax error near unexpected token `$'do ''
    influxdb安装
    jvm堆内存设置问题Java heap space、GC overhead limit exceeded
  • 原文地址:https://www.cnblogs.com/cpoint/p/3367333.html
Copyright © 2011-2022 走看看