广义线性表:线性表的一种推广。如果允许构成线性表的元素本身又可以是线性表的话,则该线性表称为广义线性表。
设有一个表L={a1,a2,a3,…,an},其中L为表名,ai为表元素(1≤i≤n).当ai为数值时,表示为元素;当ai为大写字母时,表示另一个表,但不能循环定义。例如下面的定义是合法的(约定L是第一个表的表名):
L=(3,4,3,4,K,8,0,8,P)
K=(5,5,8,9,9,4)
P=(4,7,8,9)
程序要求:当全部表给出后,求出所有元素的最大元素。例如上例的最大元素为9,表中全部元素和为 98
输入数据:输入全部表,每行一个表。
输出数据:最大元素和全部元素和。
以下是程序,我没看懂,请帮帮忙(尤其是从主程序的第二个WHILE循环开始):
Program GuangYiBiao_11;
CONST Lmax=100;
TYPE
tabTYPE=RECORD
  length:0..Lmax;
  element:array[1..Lmax] of char;
  END;
qtype=RECORD
  base:array[0..Lmax] of char;
  front,rear:0..Lmax;
  END;
VAR
  t:array['A'..'Z'] of tabtype;
  q:qtype;
  ch:char;
  s:string;
  i:integer;
PROCEDURE inqueue(VAR q:qtype; c:char);
  BEGIN
    q.rear:=q.rear+1;
    q.base[q.rear]:=c;
  END;{inqueue}
FUNCTION outqueue(VAR q:qtype):char;
  BEGIN
    q.front:=q.front+1;
    outqueue:=q.base[q.front];
  END;{outqueue}
FUNCTION maxnumber(c:char):char;
  VAR
    ch,m,max:char;
    i:integer;
  BEGIN
    max:='0';
    FOR i:=1 to t[c].length DO
      BEGIN
        ch:=t[c].element[i];
        IF ch in ['A'..'Z'] THEN m:=maxnumber(ch)
                            ELSE m:=ch;
        IF max<m THEN max:=m;
      END;
    maxnumber:=max;
  END;{maxnumber}
FUNCTION total(c:char):integer;
  VAR
    k,i,m:integer;
    ch:char;
  BEGIN
    k:=0;
    FOR i:=1 to t[c].length DO
      BEGIN
        ch:=t[c].element[i];
        IF (ch in ['A'..'Z']) THEN m:=total(ch)
                              ELSE m:=ord(ch)-ord('0');
        k:=k+m
      END;
    total:=k;
  END;{total}
BEGIN{main}
  FOR ch:='A' to 'Z' DO t[ch].length:=0;
  q.front:=0;
  q.rear:=0;
  inqueue(q,'L');
  WHILE q.front<>q.rear DO
    BEGIN
      ch:=outqueue(q);
      write(ch,'=');
      readln(s);
      i:=1;
      WHILE s[i]<>'(' DO i:=i+1;
      WHILE s[i]<>')' DO
        BEGIN
          s[i]:=upCASE(s[i]);
          IF s[i] in ['A'..'Z','0'..'9'] THEN
            BEGIN
              inc(t[ch].length);
              t[ch].element[t[ch].length]:=s[i];
              IF s[i] in ['A'..'Z'] THEN inqueue(q,s[i]);
            END;{then}
          inc(i);
        END;{while}
    END;{while}
  Writeln('total is:',total('L'));
  Writeln('max is:',maxnumber('L'));
END.{main}

注意:在输入数据时要输入形如下表的数据:
表(4,5,K,p,w,9,8)要写成(45Kpw98)  不分大小写