zoukankan      html  css  js  c++  java
  • 数据结构试题(栈和队列)

    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,一遍少,另一边多。

    (对栈的考察)

  • 相关阅读:
    线程池学习笔记
    线性表的顺序存储和链式存储的实现(C)
    二叉树遍历算法——包含递归前、中、后序和层次,非递归前、中、后序和层次遍历共八种
    【Linux学习笔记】栈与函数调用惯例
    Linux网络编程简单示例
    Linux常用C函数-接口处理篇(网络通信函数)
    android的快速开发框架集合
    Android访问网络数据的几种方式Demo
    Linux C函数库大全
    Mysql 之配置文件my.cnf
  • 原文地址:https://www.cnblogs.com/yuys/p/3007607.html
Copyright © 2011-2022 走看看