数据的结构:  
                          A 
      B       ,         C     ,       D  ..... 
B1  B2  B3 ,    C1  C2  C3  ,D11  D2  D3 D4..... 
 
数据在文本里形式: 
A  40 B 12 B1 3 1 2 3 B2  2 1 2 B3 1 1 C 13 C1 1 1 C2 2 1 2 C3 3 1 2 3 D 12 D1 1 1 D2 1 2 D3 1 1 D4 1 1 
说明 :
A是标签 40表示 后面40个字节是 A的值长度 (从B 到D后面的那个 1 1 每个数字一个字节)
B表示第一个节点 
  12 表示后面12个字节是B的值长度(从B1到C前面的那个1) 如果12 +1(B标签所占的字节)=40 那么表示A下面就只有一个节点B 否则表示还有其他(例如C D ) 
  B1 表示B下面的第一个标签 
  3 表示后面3个字节是B1值得长度  
  1 2 3 表示B1的值 
 如果3(3个字节)+1(3所占的字节)+1(标签B1所占的字节)=12 那么表示B 下面只有一个B1 否则。 
  12>1+1+3 所有表示还存在B2 
  。 
  12=1(B1所占字节)+1(B1长度3所占字节)+3(B1值所占字节)+1(B2)+1+2+1(B3)+1+1 
。 
40>1(B所占字节)+12(B的总长度) 
所有存在C 和D ------------------------------- 
这些数据我要读取 储存 
问题是我要储存在哪里 MAP? tree? 数组??? 
具体怎么做呢。给个思路 顺便给个最简单的 A(BCD(D1 D2))的一个例子我都没用用过MAP TREE

解决方案 »

  1.   

    可以构造一个tree来存储,每个节点包含一个兄弟节点指针和子节点指针
      

  2.   

    用链表的方法存储树的结构
    可以定义这样的结构来存储
     #define MaxTreeSize 100 //向量空间的大小,由用户定义
      typedef char DataType; //应由用户定义
      typedef struct{
          DataType data;//结点数据
          int parent; //双亲指针,指示结点的双亲在向量中的位置
        }PTreeNode;
      typedef struct{ 
          PTreeNode nodes[MaxTreeSize];
          int n; //结点总数 
        }PTree;
      PTree T; //T是双亲链表
     
      若T.nodes[i].parent=j,则T.nodes[i]的双亲是T.nodes[j]。
      

  3.   

    按照LZ以上所说  还是构造一个tree来存储.
      

  4.   

    我就是不知道怎么构造TREE啊  以前没有用过TREE啊  一直是用数组的 
    我想问的就是这么创建的。
      

  5.   

    我就是想用TREE 可是我无从下手 以前没有用过的