(1) 記号表ライブラリ関数の構成例

 記号表ライブラリは、例えば以下の様な構成として下さい。記号表のデータを外部から隠すため、構造体はstaticで宣言すると良いでしょう。
#include <stdio.h>
static struct st
 {
   char *key;
   struct st *next;
 }
 *root, *ptr, *qtr;

void symbol_init ()
{
  root = NULL;
}

void symbol_insert (data)
    char *data;
{
  dataのリスト形式の記号表への登録
}

int symbol_search (data)
    char *data;
{
  dataの記号表からの探索
}


int symbol_size ()
{
 rootからnextフィールドがNULLであるセルまでのセルの個数をカウントする
}

void symbol_print ()
{
  nextフィールドがNULLになるまでプリント
}
(2)main関数の構成例


#include <stdio.h>

int main( void )
{
  static char *data[ ] = {"begin", "end", "start", "print"};
  static int count = 4;

  /* ここで記号表に対する各種の操作を試す */
}
(3)サイズを求める関数

 記号表の構造体のポインタを引数とし、記号表の終端まで検索し、経路長を変数countでカウントするものです。関数の返り値はcountです。以下の?????はどのようになるでしょうか。

int symbol_size ( ????? )
{
  int count = 0;
  if (root == NULL)
   ?????
  else
   {
      for (ptr = root; ptr != NULL; ptr = ptr->next)
         count++;
      ?????
   }
}