仲 恺 农 业 工 程 学 院 试 卷 (答案及评分标准) 《数据结构与算法》 2011至 2012 学年度第 2 学期期 末 (A)卷  专业班级                    姓名                 学号                    题  号 一 二 三 四 五 六 七 八 合计 得  分  评卷人                   (考生注意:考试时间为120分钟。答案须写在答题纸上,并注明题号,考试结束后将试卷连同答题纸一齐交)  一、选择题(每小题选出一个最合适的答案,共30分) 1、在以单链表为存储结构的线性表中,数据元素之间的逻辑关系用( C ) A.数据元素的相邻地址表示 B.数据元素在表中的序号表示 C.指向后继元素的指针表示 D.数据元素的值表示 2、线性表采用链式存储时,结点的存储地址( B ) A.必须是不连续的 B.连续与否均可 C.必须是连续的 D.和头结点的存储地址相连续 3、设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为( D ) A.front=front+1 B.front=(front+1)%(m-1)  C.front=(front-1)%m 第 1  页,共 6 页
D.front=(front+1)%m 4、设有一个顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素的出栈顺序为s2,s3,s4,s6,s5,s1,则顺序栈的容量至少应为多少( C ) A.1  B.2  C.3  D.4 5、栈和队列都是( A ) A.存取位置的线性结构 B.顺序存储的线性结构C.链式存储的线性结构D.存取位置的非线性结构 6、现有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。表示该遗传关系最适合的数据结构为( B ) A.线性表  B.树    C.图    D.二叉树 7、下列陈述中正确的是( D ) A.二叉树是度为2的有序树 B.二叉树中结点只有一个孩子时无左右之分 C.二叉树中必有度为2的结点 D.二叉树中最多只有两棵子树,并且有左右之分 8、在具有n个叶子结点的严格二叉树(即结点的度要么是0要么是2)中,结点总数为( C ) A.2n+1    B.2n     C.2n-1    D.2n-2 9、N个顶点的有向完全图中含有有向边的数目最多为( D ) A.N-1    B.N    C.N(N-1)/2    D.N(N-1) 10、在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为( D ) A.e    B.2e    C.n2-e    D.n2-2e  二、填空题(每小题4分,共20分) 1、栈顶的位置是随着  进栈和出栈  操作(栈操作)而变化的。 2、对于单链表形式的队列,其空队列的front指针和rear指针都等于头结点的地址 。 第 2  页,共 6 页
3、n个记录的折半查找,若查找失败,进行了 [log2n]+1 次比较。 4、从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需  向前移动  一个位置。 5、在队列中,允许进行插入操作的一端称为  队尾 ,允许进行删除操作的一端称为  队头  。  三、给出线性表的单链表存储结构,并实现用e返回线性表中第i个元素的值(即编写完整的函数GetElem(L,i,e),这里只给出函数的名称和参数名,未给出类型)。(10分)  typedef struct LNode{  ElemType   data;  struct LNode   *next; }LNode,*LinkList;  Status GetElem(LinkList L,int i,ElemType &e){  LinkList p;  int j;  p=L->next; j=1;  while(p&&ji)return ERROR;  e=p->data;  return OK; }  四、给出单链队列的存储结构(数据类型名为LinkQueue),下面是入队函数,但有缺漏,请补全(说明在哪一行补什么内容)。(10分) 第 3  页,共 6 页 p=p->next; ++j;
Status EnQueue(LinkQueue Q,e) {p=new QNode;  if(!p) return 0; p—>data=e;  Q.rear—>=p; return 1;}  typedef struct QNode{  QElemType  data;  struct QNode *next; }QNode,*QueuePtr;  typedef struct{  QueuePtr front;  QueuePtr rear; }LinkQueue;  Status EnQueue(LinkQueue &Q,QElemType e){  QueuePtr p;  p=new QNode;  if(!p) return 0;  p->data=e; p->next=NULL;  Q.rear->next=p;  Q.rear=p;  return 1; }  五、给出二叉树的三叉存储结构,若二叉树后序遍历的序列为BDECA,请画出该二叉树。(10分)  typedef struct TrTNode{  TElemType data;  struct TrTNode  *lchild,*rchild,*parent; 第 4  页,共 6 页
}TrTNode,*TrTree;            六、假设通信电文使用的字符集为{a,b,c,d,e,f},名字符在电文中出现的频度分别为:34,5,12,23,8,18,试为这6个字符设计哈夫曼编码。请先画出你所构造的哈夫曼树(要求树中左孩子结点的权值小于右孩子结点的权值),然后分别写出每个字符对应的编码。(10分)            a:11 第 5  页,共 6 页
b:1010 c:100 d:01 e:1011 f:00  七、给出图的邻接多重表的存储结构,并说明其主要适用于存储何种图。(10分)  typedef struct EBox{  VisitIf mark;  int ivex,jvex; struct EBox *ilink,*jlink; InfoType *info; }EBox; typedef struct VexBox{  VertexType data;  EBox *firstedge; }VexBox; typedef struct VexBox{  VexBox adjmulist[Max_VERTEX_NUM];  int vexnum,edgenum; }AMLGraph; 这个结构主要适用于存贮无向图  第 6  页,共 6 页