考研数据结构大题整合_组一(ZYL组)

考研数据结构大题整合

一、ZYL组

ZYL组一

1.一棵树有度为i的结点ni 个(i=1,2,3,…m), 求叶结点的个数.(10分)


2、已知带权连通图G=(V,E)的邻接表如图所示,请画出该图,并分别以深度优先和广度优先遍历之,写出遍历结点序列,并画出该图的一个最小生成树。其中表结点的三个域各为: (10分)
在这里插入图片描述


3.证明:任一棵满二叉树T中分支数B满足B=2(n0-1),(其中n0为叶结点数)。(10分)


五、程序填空/写程序结果或程序功能 (20分)
1、程序填空: (5分)

void SelectSort(Datatype R[ ],int n)
//用直接选择排序法对R[0]---R[n-1]排序
{    int i,j,small;  
      datatype temp;
      for(i=0;i<n-1;i++)
      {    small=i;
            for(j=i+1;j<n;j++)     //寻找排序码最小的元素
            {   if(________)   small=j;} 
            if(small!=i)
             {   temp=R[i]; R[i]=R[small]; R[small]=temp; }
        }
}

2、分析下面程序段的复杂度.(5分)

     for (i=1; i<= n ;i++)
      {  for (j=1;j<= n;j++)
            b[i,j]=0;
			{sum=0;
			          for (k=1;k<=n;k++)
			              {sum=sum+a[i,k]*a[k,j];
			}
			}
        }
   b[i,j]=sum;
       end;   

该程序段的复杂度为_________.


3、一棵具有n个结点的完全二叉树以一唯数组作为存储结构,对该完全二叉树进行前序遍历的非递归算法如下:写出空格部分的内容。 (10分)

//preorder(R)     前序遍历二叉树R
       int  R[n];
      {    int  root;    //root 为数组的下标
            seqstack   *s;  //*s 为一指针栈,类型为seqstack
            s->top= -1;    //s栈置空
            root=1;   //从数组第一单元开始扫描遍历
             while{(root<=n)||(s->top>-1)}
             {     while (______________)
                    {   cout<<R[root];   
                         _________;
                         s->data[s->top]=root;    //保留结点
                         root=2*root;       //遍历左子树
                     }
                     if (__________)      //栈非空,遍历右子树
                     {    root=s->data[s->top]*2+1;
                          ___________;
                      }
                }
           }     

六、算法设计 (10分)
用链表插入法对a[0]—a[n-1]排序,排序结果存放在带头结点的单链表list中。


ZYL组二

四、计算题/画图题/证明题 (30分)
1.试为下列二叉树建立后序线索,画出相应的后序线索二叉树.(10分)
在这里插入图片描述


2.已知某电文中共出现10种不同的字母,各个字母出现的频率分别为A:8, B:5, C:3, D:2, E:7, F:23, G:9, H:15, I:3, J:35 ,现在对这段电文用三进制进行编码(即码字由0,1,2组成),问电文编码总长度最少有多少位?并画出图(10分)


3.证明:前序序列和中序序列、后序序列和中序序列可唯一确定一棵二叉树,而前序序列和后序序列则不能。(10分)


五、程序填空/写程序结果或程序功能 (20分)
1、程序填空: (7分)
用链表表示的数据的简单选择排序,结点的域为数据域data,指针域next,链表首指针为head,链表无头指针。

 Selectsort(head)
{
   p=head;
   while(p_________)
   {   q=p;
		r=__________;
		while(____________)
		{ 
			 if(____________)
			   q=r;
			   r=____________;
		}
		tmp=q->data;
		q->data=_________
		p->data=tmp;
		p=__________;
   }
}

2、分析下面程序段的复杂度:(5分)

     x=n;    //n>1
	y=0;
	while ((x>=(y+1)*(y+1))
     y=y+1;

该程序段的复杂度为____________________。


3、中序遍历线索二叉树算法(树的结点有5个域:数据域data,左右孩子域lchild, rchild和左右标志域ltag, rtag,规定标志域1是线索,0是指向孩子的指针。) (8分)

void inorder  (Hbitree *t)
{  Hbitree *p; p=t;
   if (p_________)
   { while (p___________)  p___________;   //找开始结点
      while (p__________)
      {  cout <<p->data;
       p= inordernext(p);    //调用函数找中序后继
      }
   }
}

六、算法设计 (10分)
编写函数实现双向冒泡排序,即在排序过程中交替改变扫描方向。


ZYL组三

四、计算题/画图题/证明题 (30分)
1、对于如图所示的有向图,试写出:
在这里插入图片描述

(1) 从顶点①出发按深度方向周游所得到的深度优先生成树;
(2) 从顶点②出发按广度方向周游所得到的广度优先生成树;
(3) 能否找出一个拓扑有序的序列?若能,给出一个拓扑有序的序列。.(10分)


2.设散列表为HT[13], 散列函数为H(key)=key%13。用闭散列法解决冲突,对下列关键码序列12,23,45,57,20,0

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值