2011广东工业大学数据结构试题B
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广 东工业大学考试试卷 ( B
)
: 课程名称:
数据结构
试卷满分 100 分
名 姓 题 号 考试时间:
一 二
三
年
四
月
五
日 (第
六
七
周 八
星期
九
)
十
总分
: 号 学
线
订 评卷得分 评卷签名 复核得分
复核签名
一、选择题(10
分,每题
1 分)
1、下列程序段的时间复杂度为(
)。
k=0;
for (i=0;
i<10; i++)
k++;
A .O(1)
B .O(logn)
C .O(n)
D .O(n )
业 专
:
院 学
装
2、已知在一个单链表中,q
所指结点是
p 所指结点的前驱结点,若在 q 和
p
之间插入
s
结点,则执行语句(
)。
A .s->next=p->next;
p->next=s; B.
p->next=s->next; s->next=p;
C .q->next=s;
s->next=p; D.
p->next=s;
s->next=q;
3、若用一个长度为
6
的数组来实现循环队列,且当前
front
和
rear
的 值分别为
4
和
1,则该队列的长度是(
)。
A .2
B .3
C .4
D .6
4、稀疏矩阵的常用压缩方法有两种,即(
)。
A. 二维数组和三维数组
B. 三元组顺序表和散列表
C. 三元组顺序表和十字链表
D. 十字链表和散列表
5、在有向图的拓扑序列中,若顶点 a
在顶点
b
之前,则下列情形不可能 出现的是(
)。
A.
G
中有弧<a,
b>
B.
G
中有一条从
a 到
b
的路径 C.
G
中没有弧<a,
b> D.
G
中有一条从
b 到
a
的路径
2 :
6、具有35个结点的完全二叉树的深度为(
A.5B.6C.7)。
D.8
7、在对查找表的查找过程中,若被查找的数据元素不存在,则把该数据元素插入到查找表中。
这种方式主要适合于()。
A.动态查找表B.静态查找表
C.静态查找表与动态查找表D.静态查找表或动态查找表
8、二分查找要求被查找的表是()。
A.键值有序的链表B.链表但键值不一定有序
C.键值有序的顺序表D.顺序表但键值不一定有序
9、若在排序中,从未排序序列中依次取出元素与已排序序列(初始为空)中的元素进行比较,将其放入已排序序列的正确位置,则该方法称为()。
A.希尔排序B.起泡排序
C.插入排序D.选择排序
10、外部排序是指()。
A.用机器指令直接对硬盘中需排序数据排序
B.把需排序数据用其他大容量机器排序
C.把外存中需排序数据一次性调入内存,排好序后,在输回外存
D.对外存中大于内存允许空间的需排序的数据,通过多次内外存的交换实现排序
二、填空题(10分,每空1分)
1、数据元素及其关系在计算机存储器的表示,称为数据的。
2、对于长度为n的顺序表,假定删除表中任一元素的概率相同,则删除一个元素
平均需要移动元素的个数是。
3、用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到
1342出栈顺序,用相应的S和X表示的操作串为SX。
4、Index(S,T,pos)操作的功能是:从串S中第pos个字符起查找和串T
值相同的子串,若找到,则返回其第一次出现的位置。
假设S=‘cbcaabca’, T=‘bca’,则Index(S,T,1)=。
5、广义表(a,((b),c))的深度是。
6、已知某二叉树有31个叶子结点,且仅有一个孩子的结点数为40,则该树的结
点总数为。
7、已知无向图 G={V, E},其中
V = {a, b, c, d, e},E={(a, b), (a,
d), (a, c), (d, c), (b, e)},如果从顶点
a
开始遍历图,遍历序列为 abcde ,则采用的是 遍历方法。
8、在二叉排序树插入新结点时,新结点一定成为二叉排序树的 结点。
9、若在排序中,从未排序序列中挑选元素,并将其依次放入已排序列(初始序列 为空)的一端,则该排序方法被称为 排序。
10、文件检索的三种方式是: 顺序存取, , 按关键字存取。
三、解答题(共 36
分)
1、(7 分)二维数组
A[8][9]的元素都是
5
个字符组成的串,请回答下列问题:
(1)A 的第
6
列和第
4
行的所有元素共占多少个字节;
(2)若
A
按行存放,元素 A[6][4]的起始地址与
A
按列存放时哪一个元素的起 始地址一致,并说明理由。
设存在第
行和第
列元素,即从元素
A[0][0]开
始存放。
图
G
的逆邻接表,其中邻接链表中每个顶点按由 1 2
3
B D
3、(7 分)画出与图中所示的二叉树等价的树。
E
B F C
G
A
D
4、(7
分)设哈希函数为 H(k)=k MOD 7,用链地址法处理冲突。
请画出依次插
入元素 29,38,24,71,63,52
后,该哈希表的状态。
5、(8 分)已知序列{503,87,512,61,908,170,897,275,653,462} (1)请判断该序列是否是大顶堆,并说明理由,若不是请调整为大顶堆。
(2)写出输出最大数
908
后,经调整后的大顶堆序列。
4 2、(7 分)已知有向带权图
G
如图所示,试画出
A
1
E 6 5
四、算法填空(36分,每题6分)
1、(6分)算法f1求带头结点的单链表长度。
请在画线处填空。
int f1(LinkList L){{
len=0;
p=L->next;
while(p!=NULL){{
①;
②;
}
③;
}
2、(6分)阅读算法f2,回答下列问题:
(1)设队列Q=(1,2,3,4,5,6),请写出执行算法f2(Q)后的队列Q;(2)简述算法f2的功能。
void f2(Queue&Q){{
ElemType e;
if(!QueueEmpty(Q)){{
DeQueue(Q,e);
f2(Q);
if((e%2)==1)EnQueue(Q,e);
}
}
(1)请画出执行算法f3(T)后的二叉树T;
(2)简述算法f3的功能。
B
if(T){
f3(T->lchild);G
f3(T->rchild);
if(!T->rchild&&T->lchild){
T->rchild=T->lchild;
T->lchild=NULL;
}
}
}
C F
3、(6分)如图所示的二叉树T采用二叉链表存储结构,
A
void{
D E
4、(6分)图的逆邻接表存储结构的类型定义如下:
#define MaxNum10//图的最大顶点数
typedef struct Arc{
int adjvex;//邻接点序号域
struct Arc*nextArc;//弧表链指针域
}Arc;//弧结点类型
typedef struct{
ElemType vertex;//顶点域
Arc*firstArc;//弧表头指针
}VertexNode;//顶点表结点类型
typedef struct{
VertexNode v[MaxNum];//顶点表
int n,e;//图中当前的顶点数和弧数}ALGraph;//逆邻接表类型
假设有向图G是用逆邻接表存储,算法f4计算有向图G中顶点v的入度。
请在画
....
线处填空。
int f4(ALGraph G,ElemType v){
for(i=0;i<G.n;i++){{
if(①){
indegree=0;
for(②;p;③)
indegree++;
return indegree;
}
}}
return-1;//顶点v不存在
}}
5、算法f5对r[h],r[h+1],….r[p]子序列进行一趟快速排序。
请在画线处填空。
int f5(list r,int h,int p){{
i=h;j=p;x=r[i];
while(i<j){{
while(①&&i<j)j--;
if(i<j){②;i++;}
while(r[i].key<=x.key&&i<j)i++;
if(i<j){{r[j]=r[i];j--;}
}③;return i;
}
6、(6分)算法f6将键值为x
typedef struct 的结点插入到二叉排序树中,请在画线处填空。
typedef struct PNode{
KeyTyp e
struct
key;
PNode*left,*right;
}PNode, Status *LinkList;
f6(LinkList&T,KeyType x){
parent=NULL;
while(T!=NULL){
parent=T;
if(x==T->key)return ERROR;
else if(x<T->key)T=T->left;
}
else T=T->right;
p=(PNode*)malloc(sizeof(PNode));
p->key=x;
p->left=p->right=NULL;
if(parent==NULL)__
__
__
__
__
__
__
__
__
;
else if(x<parent->key)
______________;
else______________;
}
return OK;
五、算法设计题(8分)
一个线性表的冗余度为n/m,其中n和m分别为表中元素总数和不同元素个数。
编写算法,求一个带头结点的有序单链表的冗余度。
例如,下表的冗余度为17/9。
(1,2,2,3,4,4,4,5,5,6,6,6,6,7,8,9,9)
六、附加题(10分,二选一,多做只按第一题给分)
1、某百货公司仓库中电视机的编码和数量信息,按其编码从小到大存储在一个带头结点的循环链表中。
链表的结点由编码、数量和链指针三个域组成
code num next
用二叉链表存储结构,请编写一个正则二叉树的判定算法。