• 栈的运用(2)


    问题描述:

     写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是

    问题分析:

     思路应该是有的,先读入字符序列,当读到‘&’时,前面的一个入队列,后面的一个进栈,然后都用数组来保存,最后比较两数组的元素是否都相同,若相同,则是该模式。

    Int main()

    {

      Stack s;

      Queue q;

      Char buffer1[20]; 

      Char buffer2[20];

      Int i=0,count=0,j=0;

      Char temp=’’;

      Printf(请输入字符序列);

      While(temp!=@){

        Scanf(%c, &temp);

    Buffer1[i]=temp;

    I++;

    }

    While(buffer1[i]!=&){

    Push(q,buffer1[i]);

    I--;

    }

    If (buffer[i]==&)

    {

       Count++;

       I--;

       If(count==1)

       { 

         While(buffer1[i])

         {

          Push(s,buffer1[i]);

          I--;

         }

       }

       Else 

        {

           printf(这不是模式的字符序列);

           Return ;

        }

    }

    I=0;

    j=0;

    While(!stackempty(s)){

    Pop(s,buffer1[i]);

    I++;

    }

    While(!queueempty(q))

    {

     Pop(q,buffer2[j]);

     J++;

    }

    If(i==j)

    {

      While(buffer[i])

     {

          If(Strcmp(buffer[i],buffer[j])) 

          {

           I++;

           j++;

          }

          Else

          {

            Printf(这不是模式的字符序列);

            Return;

          }

          }//while

        }//if

        Else

    {

       Printf(这不是模式字符序列);

       Return;

    }

     }

    看得出我把问题弄复杂了,把复杂简单化,要理清思路。书上的算法:

    Bool Symmetry(char  a[])

    {

         Int i=0;

         Stack s;

         InitStack(s);

         ElemType x;

         While(a[i]!=&&&a[i])

         {

            Push(s, a[i]);

            I++;

         }

    If(a[i]) return false;

    I++;//跳过&这个字符

    While(a[i])

    {

      Pop(s,x);//先弹出来,然后立即判断

       If(x!=a[i]){

       DestoryStack(s);

       Return false;//表明已经不是模式字符串

       }

       I++;

    }

    Return true;

    }

     

  • 相关阅读:
    AtCoder Beginner Contest 199(Sponsored by Panasonic)
    牛客练习赛81
    Linux查看日志定位问题
    mysql慢查询诊断
    本地安装jenkins,github拉取Python代码,并执行python脚本
    Mac升级到big sur之后,根目录无法写入文件如何解决?
    mysql 查看当前事务
    MongonDb在thinkphp中常用的功能整理(模糊查询)
    PHP操作MongoDB之|增-删-改-查|
    将MySQL中数据导入到MongoDB中
  • 原文地址:https://www.cnblogs.com/wj204/p/3044336.html
Copyright © 2020-2023  润新知