(答案及评分标准)
《数据结构与算法》 2011至 2012 学年度第 2 学期期 末 (A)卷
专业班级 姓名 学号
| 题 号 | 一 | 二 | 三 | 四 | 五 | 六 | 七 | 八 | 合计 |
| 得 分 | |||||||||
| 评卷人 |
一、选择题(每小题选出一个最合适的答案,共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
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指针都等于头结点的地址 。
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&&j p=p->next; ++j;
}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}
四、给出单链队列的存储结构(数据类型名为LinkQueue),下面是入队函数,但有缺漏,请补全(说明在哪一行补什么内容)。(10分)
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;
}TrTNode,*TrTree;
六、假设通信电文使用的字符集为{a,b,c,d,e,f},名字符在电文中出现的频度分别为:34,5,12,23,8,18,试为这6个字符设计哈夫曼编码。请先画出你所构造的哈夫曼树(要求树中左孩子结点的权值小于右孩子结点的权值),然后分别写出每个字符对应的编码。(10分)
a:11
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;
这个结构主要适用于存贮无向图下载本文