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

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


    for (i=1; i<=n ; i++)   printf(“      %d”,a[i]);
    printf(“\n”);
  }
else   for(i=1; i<=n; i++)
      if (ok(i,j)) //检查(i,j)上能否放
{  a[j]=i;  queen(j+1);}//在(i,j)上放,第j列的皇后在第i行
          }
         main ()
           {  queen(1);  } // 从第一列开始试探
10.队列: 注意循环队列判空判满的条件(增加一个元素的空间)
11.在非循环队列中:
当Q.front=Q.rear<>0时能否判空?    能
当 Q.rear=0时,能否判空?          能
   Q.front=0时,能否判空          不能
13. 循环队列判空判满及求长度
空: Q.front=Q.rear
满: (Q.rear+1)%MAXSIZE=Q.front
长度:(Q.rear-Qfront+MAXSIZE)%MAXSIZE
14. k阶斐波那挈序列
试用循环队列编写求k阶斐波那挈序列中的前n+1项(f0.,f1,f2,….fn)的算法,要求满足fn<=max而fn+1> max, 其中max为某个约定的常数。(注意本题所用的循环队列的容量为k)
方法一:fi=fi-1+…fi-k(未考过)
        而 fk=f0+….f(k-1),用fk冲掉f0,用f(k+1)冲掉f1,依次循环求出fk,直到发fk>max为止
    Void fb(int k; int max)
     { for(i=0;i<=k-2;i++) {f[i]=0; cq.elem[i]=0;}
       cq.elem[k-1]=1; cq.rear]k-1;n=k;
       while (cq.elem[cq.rear]<max)
         {f[n]=0;
          for(j=0;j<k;j++) f[n]=f[n]+cq.elem[j];
          cq.rear=(cq.rear+1)%k;
          cq.elem[cq.rear]=f[n]; n++;
         }
       if(cq.elem[cq.rear]>max) n=n-2;
       else n=n-1;
       if (max=1) {n=k; f[k]=1;}
    }
方法二:fi=f(i-1)+…f(i-k);  f(i+1)=fi+f(i-1)+….f(i-k+1)
        两式相减:f(i+1)=2*fi-f(i-k)
                  f(k)=2*f(k)-f(0)  (时间复杂度要小)
   Void  fb (int k;  int max;)
    {  for (i=0;i<=k-2; i++) {f[i]=0; cq.elem[i]=0;}
        cq.elem[k-1]=cq.elem[k]=1; cq.rear=k;  n=k+1;  f[k-1]=f[k]=1;
       while (cq.elem[cq.rear]<max)
         { j=(cq.elem+1)%(k+1);
         f[n]=cq.elem[cq.rear]*2-cq.elem[j];
         cq.elem[j]=f[n];  cq.rear=j; n++;
        }
       if (cq.elem[cq.rear]>max) n=n-2;  else n=n-1;
       if (max= =1) {n=k; f[k]=1;}
       if (max= =0) n=k_2;
   }
第四章:串
1. 重点:KMP算法
(要求书上的程序要看懂,比如说04年就出了模式匹配的阅读程序的题目)
会求next和nextval 数组的值。
本章考试内容基本就是几个形式,要么给你个字符串要求它的next或nextval数组,或者会给出你主串和子串,要求你写出匹配的过程,还有就是04年的那种阅读的形式了!
第五章:数组,广义表
1. 两类矩阵
1):特殊矩阵:非0元的分布有一定规则。如对称矩阵,三角矩阵,对角矩阵
2):稀疏矩阵
2. 对称矩阵(出选择和填空的机会较大)
对称矩阵最少需要多少个存储单元 n(n+1)/2个
关系:k=          (参看P95)
注意在确定对称矩阵和对应一维数组的位置的题目时一定要注意是以行序还是列序,下标是从0开始还是从1开始
例:若1<=i,j<=n 已知i, j 求k             公式1
      k=(i*(i-1))/2+j-1          (i>=j)     
k=(j*(j-1))/2+i-1          (i<j)
若0<=i,j<=n-1已知i, j 求k            公式2
k=(i*(i+1))/2+j          (i>=j)
k=(j*(j+1))/2+i          (i<j)
若1<=i,j<=n,已知k, 求i,j      (用公式1)
  已知k=49 求i,j
  将j=i 代入(公式1)得 k+1<=i(i+1)/2 求使之成立的最小i .然后再将i 值代入(公式1)求出j
若 0<=i,j<=n-1 已知k求i,j     (同上用公式2)
以上方法希望大家掌握!
3. 下三角矩阵(类似于对称矩阵)
4. 上三角矩阵
若0<=i,j<=n-1已知i, j 求k  (要求自己会推导)
  第p行上恰好有n-p个元素,在i行上ai,j前有j- i个元素,i前有i个完整行
  所以 第I 行前共有元素个数为:∑(n-p) (求和下限为p=0,上限为i-1)=
  (i*(2n-i+1))/2
         所以 k= (i*(2n-i+1))/2+j-i          i<=j (上三角)
         若1<=i,j<=n 已知i, j 求k的情况大家可以自己去推导
            k=((i-1)(2n-i+2))/2+(j-i+1)-1
        注意:以上的k值均从0开始。其实我认为做这种题目,首先看两点,一是矩阵的起始下标,二是数组的开始下标!检验你的公式是否正确你可以取一个比较容易计算的元素比如a0,2代入到公式检验下,因为a0,2是矩阵的第三个元素!
三角矩阵的存储单元要比对称矩阵多一个元素,用于存储相对三角矩阵的常       数值c,存放在第n(n+1)/2+1个单元里
        例如:已知一个9阶上三角矩阵A按行存储在一维数组B中,B[0]存放矩阵中第一个元素a11则B[31]存放元素(a5,6),按列序存放,存放元素(a4,8 )
              上面题目在录音中均有详细讲解过程。
        以上计算每年至少会有一个填空题!
5. 三对角矩阵
按行序 1<=i,j<=n 。Loc(aij)=Loc(a11)+3*(i-1)-1+j-i+2
若一个s(素数)对角矩阵满足下述条件:
若0<=i,j<=n-1,已知i, j 求k 。 k=(3*i-1)+(j-i+2)-1=2i+j
若0<=i,j<=n-1已知k 求i, j   i=(k+1)/3,  j=k-2*i.
若1<=i,j<=n 已知i, j 求k。 k=3*(i-1)-1+(j-i+2)-1=2*i+j-3
若0<=i,j<=n-1已知k 求i, j.  i=(k+1)/3+1 ,   j=k-2*i+3
         以上公式我认为没有必要去记,可以参考一下人邮出版社的〈数据结构课程辅导与习题解析〉这本书,里面有具体的推导过程。象上面的所有的计算都有具体例题
   6.随机稀疏矩阵存储(只掌握三元组,行逻辑,十字链表不要求掌握)
    熟悉带行表的稀疏矩阵的存储结构,会根据行表推导原矩阵(参看04年的简答题)
6. 广义表:判断广义表的深度,广度,和表长。会画广义表用书上的第一种存储结构。
有很多朋友画广义表的时候经常会出错,我觉得可以用一个方法去检验你画的图是否正确!你可以根据广义表的表达式用gethead()和gettail()函数取得某一个元素(这是一系列的操作组合,参看04年的填空第六题的形式),然后看在你画的广义表中从表头开始取得该元素是否也经历了这些操作就行了
第六章:树与二叉树
1. 掌握二叉树的5个性质,并能灵活运用!第三个性质的证明必须掌握(参看04年的简答题1)
2. 已知一棵度为m的树,有n1个度为1的结点,有n2个度为2的结点,有nm个度为m 的结点,问有多少叶子结点?

相关话题/

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