北京交通大学计算机专业考研辅导班笔记(数据结构)(5)

北京交通大学 /2009-04-04


                }
          }
25. 已知一棵树的层次序列以及各节点的度,建立该树的二叉链表结构。(未考过)
      1  2  3  4  5  6  7  8  9  10   11  12   13   14
数组 a    A  B  H  L C  D  G  I  M  E   F   J    K    N  //存放结点
数组 b    3  3   1  1 0  2   0  2  1  0    0   0    0    0   //存放结点的度
         
 Void  Tree (Cstree  bt,  char  *a, char *b, int n)
      { if (n= =0)  bt=Null;
       else { i=1; qq.front=0; qq.rear=1;  //i是是数组下标
            p=(CsNode*)malloc(sizeof(CsNode));
            p->data=a[i];   p->du=b[i];  p->snib=Null; //生成第一个结点,右子树必为空
            bt=p;  i++;  qq.elem[qq.rear]=p;
            if (n= =1)   bt->fch=Null;
            else {  while (qq.front!=qq.rear)    //不相等是为空
                    {qq.front++; p=qq.elem[qq.front]; j=p->du;
                     if (j= =0)  p->fch=Null;  //叶子节点时
                     else {while j>0  //兄弟结点加入二叉树,右子树一直往下
                           { q=(CsNode*)malloc(sizeof(CsNode));
                             q->data=a[i];  q->du=b[i];
                             if (j= =p->du)  p->fch=q;
                             else q1->snib=q;
                             qq.rear ++;  qq.elem[qq.rear]=q;
                             q1=q;  i++;  j--;
                            }
                       }
                  }
            }
       }
    26. 已知数组data[1..n]存放一森林的先序序列。在brother[1..n]中存放每个结点的右兄弟在数组data[]中的下标,约定brother[i]中存放data[i]的右兄弟下标,如不存在右兄弟,其内容为0,设计算法构造该森林的二叉链表(未考过)
        1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
   data  A  B  C   D   E   F   G  H   I   J   K   L  M   N  O  P   Q   R
 brother 15  8   4   7   6    0   0  12   0  11  0   0   0   0   18  17  0   0
         
       Void  crt_forest (tlink  &T,  int k1,  int k2)
      //T为第一棵树的树根指针,k1和k2为建森林所对应的数组区域的首尾下标
        {  if (k1>k2)   T=Null;   //对于本例k1=1,k2=18
           else { T=(csnode*)malloc(sizeof(csnode));
                T->data=data[k1];
                If (brother[k1]= =0)     //k1无右兄弟,则在data中从k+1到k2都是k1的子孙
                 { crt_forest(T->fch,k1+1, k2); T->nsib=Null;}
                else    //在data中从k+1到brother[k1]-1是k1的子孙,从brother[k1]
                        到k2是k1的右兄弟分支
                 { crt_forest(T->fch, k1+1,brother[k1]-1);
                  crt_forest(T->nsib,brother[k1],k2);
                 }
               }
          }
    27. 哈夫曼树(要求会构造)
第七章:图
1. 掌握邻接矩阵和邻接表
2. 十字链表,邻接多重表不要求编程,但应该能看懂
3. 时间复杂度:邻接矩阵O(n**2)  邻接表O(n+e)
4. 无向连通图:最多有n(n+1)/2最少有n-1条边
有向连通图:最多有n(n-1) 最少有n条弧
5.最小生成树的两个算法要求掌握
   prim算法书上有;
   kruskal算法
 //构造无向图的最小生成树,其中用struct edges表示边bv, to表示一条边的两个端点,w表示该边的权值
  #define  Max   100
  struct edges { int bv, tv, w;}
  typedef sturct edges edgeset[Max];
  int seeks(int set[], int v) 
   { int i=v;
    while (set[i]>0) i=set[i];
return(i);
   }
  kruskal(ge,n,e)
{ int n,e; edgeset ge;      //将图中的边按权值由小到大存放在数组ge中
 int set[Max], v1,v2,i,j;
 for (i=1;i<=n;i++) set[i]=0; i=1; j=1;
 while (j<n&&i<=e)
   {v1=seek(set, ge[i].bv);
    v2=seek(set, ge[i].tv);

相关话题/

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19