• 数据结构试题(栈和队列)


    3.2 给出区分给定的“栈操作”序列是否合法的准则,并证明两个不同的合法序列不可能得到相同的输出元素序列。

    准则:

    1,从操作序列中第一个自夫妻的任何一个自序列中,‘S’的个数不少于‘X’的个数。

    2,整个序列中,‘S’的个数和‘X’的个数相同。

    证明:(反证法)

    假设两个不同的合法操作序列:

    T1 = u1,u2,,,,,un,

    T2 = v1,v2,,,,,,vn,

    ui,vi €{S,X} i=1,2,,,,,n

    可以得到相同的输出元素序列。

    不失一般性,假设第一个不同的操作为:uk = ’S‘ ≠vk = 'X'

    即:uj = vj,j=1,2,,,,,k-1

    则此时,已输出的元素序列相同,栈的状态也相同,且栈中至少存在一个元素。

    (为什么是至少存在一个元素呢?因为如果不存在最后一个元素那么下一个是出栈操作就不会合法了)

    架设,栈顶的元素为 β,正待输入的元素为 α,

    则根据栈的后进先出的原则,

    由T1得到的输出序列中,α领先于β,而又T2得到的输出序列中,β 领先于 α。

    由此证得,两个不同的合法操作序列不可能得到相同的输出元素序列。

    3.6

    status test(int& sum){

      int x;

      scaf(x);

      if(!x) sum= 0;

      else { test(sum);}

      sum+=x;

      printf(sum);

    }

    从上述运行结构可见,输出顺序和输入顺序恰相反。所以我们用栈解决此递归问题。

    void ditui(int sum){

      InintStack(S); scanf(x);

      while(x) {Push(S,x); scanf(x); }

      sum = 0; prinf(sum);

      while(!StatckEmpty(S)){

        sum+=Pop(S);

        printf(sum);

      }

    }

    3.8 识别读入的一个反对称的字符序列。

    例如:abcd&dcba@ 是反对称字符序列;abc&@ 或 abc& abc@ 或 ab&bac@都不是反对称 字符序列。

    三种情况:1,两边字符数量相同;2,一遍多另一边少;3,一遍少,另一边多。

    (对栈的考察)

  • 相关阅读:
    生活的真谛
    WSDL文件简介(附例子)
    关于智慧
    叔叔的去世
    google labs
    项目需求工具
    agent/angel/angle
    关于地图投影的C程序的一些说明
    Ubuntu下开启Apache重写扩展
    PHP内置函数之ctype_alnum() 函数检查字符串是否由字符和数字组成
  • 原文地址:https://www.cnblogs.com/yuys/p/3007607.html
Copyright © 2020-2023  润新知