湖南工业大学数据结构试卷,重点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南⼯业⼤学数据结构试卷,重点
⼀、单择题
1.栈和队列的共同特点是()。
A.只允许在端点处插⼊和删除元素
B.都是先进后出
C.都是先进先出
D.没有共同点
2.⼆叉树的第k层的结点数最多为()。
A.2k-1
B.2K+1
C.2K-1
D. 2k-1
3.数据结构中,从逻辑上可以把数据结构分成( )。
A.动态结构和静态结构
B.进凑结构和⾮进凑结构
C.线性结构和⾮线性结构
D.内部结构和外部结构
4.设⼆叉树的先序遍历序列和后序遍历序列正好相反,则该⼆树满⾜的条件是( )。
A.空或只有⼀个结点
B.⾼度等于其结点数
C.任⼀结点⽆左孩⼦
D.任⼀结点⽆右孩⼦
5.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动( )个元素。
A. n-i
B. n+l -i
C.n-1-i
D. i
6.判定⼀个栈ST(最多元素为m0)为空的条件是( )。
A.ST→TOP!=0
B.ST→TOP==0
C.ST→TOP!=m0
D.ST→TOP==m0
7. ⾮空的循环单链表head的尾结点(由P所指向)满⾜( )。
A.p->next=NULL
B.p=NULL
C.p->next=head
D.p=head
8.在线性结构中,所有结点都有( )个直接后继。
A.0
B.0或1
C.1
D.不确定
9.设数组A[m]作为循环队列sq的存储空间,front为队头指针,rear为队尾指针,则执⾏⼊队操作时修改指针的语句是。
A、sq.front=(sq.front+1)%m
B、sq.front=(sq.front+1)%(m+1)
C、sq.rear=(sq.rear+1)%m
D、sq.rear=(sq.rear+1)%(m+1)
⼆、填空题
1.已知⼀棵⼆叉树的中序序列和后序序列分别为:DBGEACHF 和DGEBHFCA,则该⼆叉树的前序序列是( )。
2.在( )链表中,从任何⼀结点出发都能访问到表中的所有结点。
3.以下函数的时间复杂度为( )。
fact(int n)
{
if (n<=1)
return 1;
else
return(n*fact(n-1));
}
4.在线索化⼆叉树中,t所指结点没有左⼦树的充要条件是
t->Ltag==( )。
5.现有按中序遍历⼆叉树的结果为abc,问有( )种不同形态的⼆叉树可以得到这⼀遍历结果。
6.如图所⽰,删除元素b的语句为( )。
三、应⽤题
1.给出下⾯森林对应的⼆叉树及⼆叉树的后序序列。
2.已知⼆叉树的先序、中序和后序序列如下:
前序序列:*BC***G*
中序序列:CB*EAGH*
后序序列:*EDB**FA
,其中有⼀些看不清的字母⽤*表⽰。
(1)请先补充*处的字母.
(2)再构造⼀棵符合条件的⼆叉树
(3)最后画出带头结点的中序线索链表。
3.有⼀个含头结点的单链表,头指针为A, 另有⼀个不含头结点的单链表,头指针为B。
(1)分别写出判断A为空和B为空的条件。
(2)假设S指向⼀个新结点,分别写出在A的表头插⼊S,和在B的表头插⼊S的语句。
4.设A~H 8个字符出现的概率为:W={0.10, 0.16, 0.01, 0.02,
0.29, 0.10, 0.07, 0.25}。
设计最优⼆进制编码(⽤0,1编码)
(1)画出最优⼆叉树
(2)计算平均码长(⼆叉树的带权路径长度)。
5.线性表有两种存储结构⼀是顺序表,⼆是链表。
试问
(1)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会⾃动地改变。
在此情况下,应选⽤哪种存储结构?为什么?
(2)若线性表的总数基本稳定,且很少进⾏插⼊和删除,但要
求以最快的速度存取线性表中的元素,那么应采⽤哪种存储结构?为什么?
6.循环队列的优点是什么?如何判别它的空和满?
四、编程题
1、已知顺序表结构体定义如下:
#define MAXLEN 100
typedef struct{
int data[MAXLEN];
int last;
}SeqList;
在顺序表L的第i个位置上插⼊值为x的元素的函数定义如下:
int InsList(SeqList *L,int i,int x){
…… //(1)函数代码空缺部分
}
要求:将“(1)函数代码空缺部分”的内容,在下⾯空⽩处填写完整,其中顺序
表满,返回-1;插⼊位置错误,返回0;正常完成数据插⼊返回1。
2、已知链队列元素的结构体定义如下:
typedef struct Node{
int data;
struct Node *next;
}QNode;
链队列头结点定义为:
typedef struct{
QNode *front,*rear;
}LQueue;
在队列中,完成⼊队操作的函数定义如下:
void In_LQueue(LQueue *q,int x){
…… //(2)函数代码空缺部分
}
依据题⽬条件,将“(2)函数代码空缺部分”的内容,在下⾯空⽩处填写完整。
3、已知线性单链表结构体定义如下:
typedef struct Node{
int data;
struct Node *next;
}LNode,*LinkList;
在单链表L的第i个位置上插⼊值为x的元素的函数定义如下:
int Insert_LinkList(LinkList L,int i,int x){
………… //(1)函数代码空缺部分
}
假设LNode *Get_LinkList(LinkList L,int i)函数已经定义完成,该函数的功能为“在单链表L中查找第i个元素结点,找到后返回其指针;否则返回空指针”。
要求:将“(1)函数代码空缺部分”的内容,在下⾯空⽩处填写完整,其中插⼊位置错误,返回值为0;正常完成数据插⼊返回值为1。
4、已知栈的结构体定义如下:
#define MAXLEN 100
typedef struct{
char data[MAXLEN];
int top;
}SeqStack;
在栈中,完成“出栈”操作的函数定义如下:
int Pop_SeqStack(SeqStack *s,char *x){
//(2)函数代码空缺部分
}
要求:将“(2)函数代码空缺部分”的内容,在下⾯填写完整,因空栈导致⽆法正常出栈,返回值为0;正常出栈返回值为1。