数据结构期末考卷12-13级

数据结构期末考卷12-13级
数据结构期末考卷12-13级

诚信应考 考出水平 考出风格 浙江大学城市学院 2012 — 2013 学年第 一 学期期末考试试卷 《 数据结构基础 》 开课单位: 计算分院 ;考试形式:闭卷;考试时间: 2013 年 1 月 12 日; 所需时间: 120 分钟

一.选择题 (本大题共 15 题,每题 1 分,共 15 分) 1. 数据结构形式地定义为(K ,R ),其中K 是 的有限集合,R 是K 上的关系的有限集合。 A. 算法 B. 数据元素 C. 数据操作 D. 逻辑结构 2.数据在计算机内存中的表示是指 。 A. 数据的存储结构 B. 数据结构 C. 数据的逻辑结构 D. 数据元素之间的关系 3. 某算法的时间复杂度为f(n)= 8log 2n+5n+2,若采用数量级的形式表示,应该是 。 A .O(8log 2n+5n+2)

B

.O(log 2n+n) C .O(n) D .O(log 2n) 4. 与单链表相比,双链表的优点之一是 。 A. 插入、删除操作更加简单 B. 可随机访问 C. 可以省略表头指针或表尾指针 D. 顺序访问相邻结点更加灵活 5. 设线性表L=(a1,a2,……an),下列关于线性表的叙述正确的是 。 A .每个元素都有一个直接前驱和一个直接后继 B .线性表中至少有一个元素 C .表中元素排列顺序必须按由小到大或由大到小 D .除第一个和最后一个元素外,其余每个元素都有且只有一个直接前驱和一个直接后继

6. 以下关于顺序存储结构的叙述中,是不正确的。

A.空间利用率高

B.逻辑上相邻的结点物理上不必邻接

C.可以通过计算机直接确定第i个结点的存储地址

D.插入、删除运算操作不方便

7.以下不是栈的基本运算的是。

A.删除栈顶元素 B. 删除栈底元素

C.判断栈是否为空 D. 将栈置为空栈

8. 向一个栈指针为HS的链式栈中插入一个s所指的结点时,则执行。

A. HS->NEXT=S;

B. S->NEXT=HS->NEXT;HS->NEXT=S;

C. S->NEXT=HS;HS=S;

D. S->NEXT=HS;HS=HS->NEXT;

9.在一个非空的链式队列中,假设f和r分别为队头和队尾指针,则插入s所指的结点运算

是。

A. f->next=s;f=s;

B. r->next=s;r=s;

C. s->next=s;r=s;

D. s->next=f;f=s;

10. 数组Q[0..n-1]用来表示一个环形队列,f为当前队头元素的前一位置,r为队尾元素的位置,假定队列中元素个数的总数小于n,计算队列中元素个数的公式为。

A. r-f

B. n+f-r

C. n+r-f

D. (n+r-f)mod n

11. 递归函数调用时,为保存局部变量及返回地址,要用一种称为的数据结构。

A. 队列

B. 栈

C. 多维数组

D. 线性表

12.将一棵有1000个结点的完全二叉树从上到下,从左到右依次进行编号,根结点的编号为1,则编号为49的结点的右孩子编号为。

A. 98

B. 99

C. 50

D. 没有右孩子

13.对二叉树的结点从1开始进行编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用遍历实现编号。

A. 先序

B. 中序

C. 后序

D. 层序

14.假设一个有n个顶点和e条边的有向图用邻接表表示,则删除与某个顶点相关联的所有边的时间复杂度是___________。

A. O(n)

B. O(e)

C. O(n+e)

D. O(n*e)

15.分析下面的无向图,从顶点A出发的深度优先搜索序列可以为___________。

A. ABDGEHFC

B. ABCDEFGH

C. ABDEGCFH

D. ACEHFDBG

二.填空题 (本大题共 20 个空,每个空 1 分,共 20 分) 1.

线性结构中元素之间存在着 ⑴ 关系,图形结构中元素之间存在着 ⑵ 关系。 2.

数据的逻辑结构包括 ⑶ 和 ⑷ 两大类。 3.

算法评价的五个方面是:正确性、稳健性、可读性、 ⑸ 和 ⑹ 。 4. 下面程序段的时间复杂度为 ⑺ 。

for (i=0;i

for (j=0; j

A[i][j]=0;

5. 对于一个长度为n 的顺序存储的线性表,在表头插入元素的时间复杂度为 ⑻ , 在表尾插入元素的时间复杂度为 ⑼ 。

6. 对于双向链表,删除一个结点需修改的指针域共有 ⑽ 个。

7.若对线性表进行的操作主要不是插入和删除,则该线性表宜采用 ⑾ 存储结构; 若需频繁地对线性表进行插入和删除操作,则该线性表宜采用 ⑿ 存储结构。

8.栈和队列是一种特殊的线性表,根据栈和队列的特征,栈是一种 ⒀ 的线性表,

队列是一种 ⒁ 的线性表。

9.一个栈的输入序列是12345,则43512是否可能是栈的输出序列?(回答是或否)

⒂ 。

10.对一棵具有n 个结点的二叉树,当它为一棵 ⒃ 二叉树时具有最小高度;当它

为一棵 ⒄ 二叉树时,具有最大高度。

11.在一个无向图中,所有顶点的度数之和等于所有边数 ⒅ 倍,在一个有向图中,

所有顶点的入度之和等于所有顶点出度之和的 ⒆ 倍。

12. 图的广度优先搜索遍历算法需借助于哪一种数据结构? ⒇ 。

三.解答题 ( 本大题共 3 题,每题 6 分,共 18 分)

1. 设有一个单循环链表p 如下图所示,

① 请画出执行p->next=p->next->next 语句后的新链表图;

② 若现有一个新结点q ,如下图所示,则请在①基础上画出接着执行q->next=p->next; p->next=q; p=q; 语句序列后的新链表图。

2.已知一棵二叉树的后序遍历序列为“a 、b 、c 、*、+、d 、e 、/、f 、-、-”,中序遍历序列为“a 、+、b 、*、c 、-、d 、/、e 、-、f”,

① 请画出该二叉树的二叉链表结构示意图;

② 写出它的后序遍历序列。

3.设有向图G如下图所示,

①请给出该图的邻接矩阵存储结构示意图;

②画出该图的强连通分量;

void func1( )

{ int x;

Statck s; //定义栈s

cin >> x;

while (x<>0) {

push(s,x);

cin>>x;

}

while (!EmptyStack(s))

cout<

}

2.阅读下列程序,说明算法的功能:

typedef struct {

ElemType *list;

int size;

int MaxSize;

}SeqList;

void func2(SeqList A, SeqList B, SeqList &C)

{ //A和B是两个分别以值递增有序排列的有序表,C是需返回的新表int i=A.size-1, j=B.size-1, k=A.size+B.size-1;

C.size=k;

while (i>=0 && j>=0 ) {

if ( A.list[i]

C.list[k]= B.list[j];

k--; j--;

}

else {

C.list[k]= A.list[i];

k--; i--;

}

}

while (i>=0) {

C.list[k]= A.list[i];

k--; i--;

}

while (j>=0) {

C.list[k]= B.list[j];

k--; j--;

}

}

3.阅读下列程序,说明算法的功能:

int func3(BTreeNode *BT)

{

if(BT==NULL)

return 0;

else if(BT->left ==NULL&&BT->right ==NULL)

return 1;

else

return func3(BT->left ) + func3(BT->right ) + 1;

}

1. 下列算法是输出邻接矩阵存储结构的有向图G各顶点的入度和出度,请在空白处填入适当的语句,使该算法完整。

typedef int adjmatrix[MaxVertexNum][MaxVertexNum];

void Graph( adjmatrix G, int n)

{ //G是n个顶点的邻接矩阵存储结构的有向图

int i, j, k, d;

for(i = 0 ; i < n; i++) {

d = 0;

for(j=0; j < n; j++)

if( ①) d++;

cout<<”顶点i的出度是”<

d = ②;

for(k=0; k < n; k++)

if( ③) d++;

cout<<”顶点i的入度是”<

}

}

2. 一个双端队列是限定在两端end1和end2都可以进行插入和删除的线性表。若用顺序方式来组织双端队列(构成一个循环队列),示意图如下图所示,Q.end1指向一端的头元素的前一个位置,Q.end2指向另一端的头元素位置,队列空条件为:Q.end1==Q.end2;队列满条件为:(Q.end2+1)%MAXSIZE==Q.end1(此时有一个元素空间为空)。初始状态时,Q.end1=Q.end2=0。入队列时,end1按照逆时针方向进行,end2按照顺时针方向进行;出队列时方向相反。下列算法是在指定端K(K为1或2)进行双端队列的插入操作,当k==1时,在左端Q.end1操作;k==2时,在右端Q.end2操作,请在空白处填入适当的语句,使该算法完整。

#define MAXSIZE 100

typedef struct {

ElemType data[MAXSIZE];

int end1;

int end2;

}DQueue;

int En_DoubleQueue( DQueue &Q, ElemType x, int k )

{ //将元素x入队列Q,k==1时入左端Q.end1,k==2时入右端Q.end2,

//若入队成功,返回1,否则返回0

if( (Q.end2+1)%MAXSIZE == Q.end1 ) //队列满

return 0;

if( k==1 ) {

④= x;

Q.end1 = (Q.end1 - 1) % MAXSIZE;

}

else if( k==2 ) {

Q.end2 = (Q.end2 + 1) % MAXSIZE;

⑤= x;

}

else

return 0;

return ⑥;

}

1. 有一个带表头附加结点的有序单链表L,其结点元素值类型为int类型,要求:

①写出该单链表的结点结构定义;

②写一算法(函数),将值为x的元素插入到单链表适当位置上,以保持单链表的有序性。

2. 有一以二叉链表方式存储的二叉树BT,要求:

①写出二叉链表的结点结构定义;

②写一算法(函数),判断二叉树BT是否是一棵正则二叉树。注:正则二叉树是指在二叉树中

不存在子树个数为1的结点(即不存在度为1的结点)。

相关文档
最新文档