データ構造の実践——一般化表の原子統計


本稿では,データ構造基礎シリーズネットワークカリキュラム(5):配列と一般化テーブルの実践プロジェクトについて述べる.
【項目−一般化テーブルの原子統計】設計アルゴリズムは、所与の一般化テーブルgにおける原子個数と最大原子を求める
[参考解答](ヘッダファイルglist.hは広義の表算法庫建設の成果であり、リンクを参照...)
#include <stdio.h>
#include "glist.h"

int atomnum(GLNode *g)  //    g      
{
    if (g!=NULL)
    {
        if (g->tag==0)
            return 1+atomnum(g->link);
        else
            return atomnum(g->val.sublist)+atomnum(g->link);
    }
    else
        return 0;
}

ElemType maxatom(GLNode *g)             //    g     
{
    ElemType max1,max2;
    if (g!=NULL)
    {
        if (g->tag==0)
        {
            max1=maxatom(g->link);
            return(g->val.data>max1?g->val.data:max1);
        }
        else
        {
            max1=maxatom(g->val.sublist);
            max2=maxatom(g->link);
            return(max1>max2?max1:max2);
        }
    }
    else
        return 0;
}

int main()
{
    GLNode *g;
    char *s="(b,(b,a,(#),d),((a,b),c((#))))";
    g = CreateGL(s);
    DispGL(g);
    printf("
"
); printf(" :%d
"
, atomnum(g)); printf(" :%c
"
, maxatom(g)); return 0; }