《数据结构》期中试题(有答案)

合集下载

数据结构期中笔试题答案

数据结构期中笔试题答案

《数据结构》期中考试题答案一、填空题(20分,每题2分)1.逻辑结构、存储结构2.便于插入和删除操作3.方便运算的实现4.算法执行过程中所需要的基本运算次数5.存储结构6.q.next=p.next ; p.next=q7.递归算法8.抽象类或接口二、选择题(30分,每题2分)AACBB BDDCB AACAC三、问答题(50分,每题10分)1.什么是栈和队列?两者有何异同?答:栈和队列都属于线性表结构,它们是两种特殊的线性表,栈的插入和删除操作都在线性表的一端进行,所以栈的特点是“后进先出”;而队列的插入和删除操作分别在线性表的两端进行,所以队列的特点是“先进先出”。

2.采用顺序存储结构的栈和队列,在进行插入、删除操作时需要移动数据元素吗?为什么?答:采用顺序存储结构的栈和队列,在进行插入、删除操作时不需要移动数据元素,因为栈和队列均不能进行中间插入、删除操作。

3.什么是队列的假溢出?为什么顺序存储结构队列会出现假溢出?怎样解决队列的假溢出问题?链式存储结构队列会出现假溢出吗?答:顺序队列,当入队的元素个数(包括已出队元素)超过数组容量时,队列尾下标越界,数据溢出。

此时,由于之前已有若干元素出队,数组前部已空出许多存储单元,所以,这种溢出并不是因存储空间不够而产生的,称之为假溢出。

顺序队列之所以会产生假溢出现象,是因为顺序队列的存储单元没有重复使用机制。

解决的办法是将顺序队列设计成循环结构。

链式存储结构队列不会出现假溢出。

因为每次元素入队,都要申请新结点,数据不会溢出。

4.答案:(1) (a2, a4, …, ) (2)将单链表中偶数结点位置的元素值写入顺序表list5.数据的存储结构有哪两种,各有什么特点?答:数据存储结构的基本形式有两种:顺序存储结构和链式存储结构。

顺序存储结构使用一组连续的内存单元依次存放数据元素,元素在内存中的物理存储次序与它们的逻辑次序相同。

链式存储结构使用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,数据元素间的关系需要采用附加信息特别指定。

数据结构期中考试试题及答案

数据结构期中考试试题及答案

一、单项选择题(本题总分 20分,每题 2分)在每小题列出的四个选项中只有 一个选项是符合题目要求的,请将正确选项前的字母。

1.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( D ) 。

A.顺序表 B.链表 C.索引表 D.散列表采用排除法,顺序表存储位置表示数据元素的顺序关系,跟关键字无法;链表的地址是动态分配的;索引表是 按数据元素的关键字排序所得,它的数据元素是没有规律的2.在长度为 n 的顺序表的第 i(1≤i ≤n+1)个位置上插入一个元素,元素的移动次数为( A ) 。

A.n -i+1B.n -iC.iD.i -1代入计算法,我们知道在 i=n+1 时不需要移动元素3.若一棵二叉树的先序遍历序列为 a,b,c ,则由 abc 三个结点构成的二叉树个数为( B ) 。

A.4B.5C.6D.74.三维数组 A[4][5][6]按行优先存储方法存储在内存中,若每个元素占 2 个存储单元,且数组中第一个元素的存 储地址为 130,则元素 A[3][4][5]的存储地址为(B A.370B .368C .366) 。

D.372Loc(3,4,5)=loc(0,0,0)+(3*5*6+4*6+5)*2=130+119*2=368;5.高度为 h 的二叉树(仅含根结点的二叉树高度为 1)的结点最少是多少( D) 。

A. h+1B. 2hC. 2h -1D. h二叉树性质 26. 将两个各有 n 个元素的有序表归并成一个有序表,其最多的比较次数是( A. nB.n+1 C. 2n-1D. n-17. 已知一算术表达式的中缀形式为 A +B *C -D/E ,后缀形式为 ABC *+DE/-,其前缀形式为( C) 。

A )。

A. -+A*BC/DE C. -+*ABC/DEB. –A+B*CD/E D. –A+B*C/DE根据中缀和后缀表达式可画出表达树如下:- + /A* D EBC故前缀表达式为:-+A*BC/DE数据结构期中考试8.下面图示的顺序存储结构表示的二叉树是( A )。

数据结构期中考试试题及答案

数据结构期中考试试题及答案

2014-2015学年第二学期《数据结构与算法》期中考试学号:姓名:一、写语句1.设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。

2.设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在p结点之前插入s结点的操作3. 设双向循环链表中结点的数据域、前驱和后继指针域分别为data,pre和next,试写出在指针p 所指结点之前插入s结点的C语言描述语句。

4. 一线性表存储在带头结点的双向循环链表中,L为头指针。

如下算法:(1)说明该算法的功能。

(2)在空缺处填写相应的语句。

void unknown (BNODETP *L){ …p=L->next; q=p->next; r=q->next;while (q!=L){ while (p!=L) && (p->data>q->data) p=p->prior;q->prior->next=r;(1) ______;q->next=p->next;q->prior=p;(2) ______;(3) ______;q=r;p=q->prior;(4) ______;} }二、写算法1.设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间)(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5个);(2) 在单链表将比正整数x小的数按递减次序排列;(3) 将正整数(比)x大的偶数从单链表中删除。

2. 设键盘输入n个英语单词,输入格式为n, w1, w2, …,wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单向链表,实现:(1)如果单词重复出现,则只在链表上保留一个。

数据结构期中考试试卷参考答案

数据结构期中考试试卷参考答案

数据结构期中考试试卷参考答案1徐州师范大学期中试卷课程名称:数据结构与算法一、单项选择1. B2. A3. B4. C 5. A 6. D 7. C 8. C 9. B 10. D 11. A 12. B 13. C 14. D 15. A 16. C 17. A 18. A 19. D 20. B二、名词解释1. 数据:是所有能被输入到计算机中,且能被计算机处理的符号的集合。

它是计算机操作的对象的总称,也是计算机处理的信息的某种特定的符号表示形式。

2. 算法:通常把具体存储结构上的操作实现步骤或过程称为算法。

3. 递归:在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归4. 时间复杂度:通常把算法中包含基本运算次数的多少称为算法的时间复杂度,也就是说,一个算法的时间复杂度是指该算法的基本运算次数。

5. 数组:数组是n(n >1)个相同类型数据元素a1,a2,…,an 构成的有限序列,且该有限序列存储在一块地址连续的内存单元中。

三、填空题(每题1分,共10分)1.有穷性、确定性、可行性、输入、输出2. n/2 插入或删除位置3. __O(1) __。

4. 以行序为主序和以列序为主序两种方式。

5. 数据数据元素。

6.元素之间逻辑关系的信息7. 长度各个对应位置上的字符 8.一定不一定。

9.头指针头结点的指针.直接前驱结点指针。

10.数据元素及其关系四、简答题1.答案:(1)结点存储密度。

顺序:结点中只有自身信息域,没有链接信息域,故存储密度大;链式:结点中除自身信息外,还有表示连接信息的指针域,存储密度小。

(2)随机存取。

顺序:可随机访问,直接存取第i 个结点信息;链式:不能随机访问.(3)插入和删除。

顺序:插入、删除,会引起大量结点的移动。

链式:插入、删除灵活方便,不必移动结点,只要改变结点中的指针值即可。

(4)预先分配存储单元.顺序:按最大预分配,存储空间利用率不高;链式:不需要预分配空间,所以存储空间利用率高。

数据结构期中考试试题答案c语言版本

数据结构期中考试试题答案c语言版本
S 1 0 3 2 1
R @ - * ( +
S 1 0 3 2 1 +
R@ - *
S 1 0 3 2 1 + * - 3 1
R@ + ( -
S 1 0 3 2 1 + * - 3 1 - 2
R@ + /
S 1 0 3 2 1 + * - 3 1 - 2 / +
R
S 1 0 3 2 1 + * - 3 1 - 2 / + @ \0
3.在带附加表头的循环双向链表中, 表头附加结点 的 左 指针域指向最后一个结点,最后一个结点的 右 指针域指向 表头附加 结点。
4.在以HL为表头指针的带附加结点的单链表和循环单链表中,链表为空的条件分别为
HL->next==NULL 和 HL==HL->next 。
5.在由数组a中元素结点构成的单链表中,删除下标为i的结点后,需要把该结点插入到空闲表的表头,具体操作为 a[i].next=a[1].next 、 a[1].next=i 。
8.一个广义表中的元素分为 单 元素和 表 元素两类。
9.广义表A=((a,(b,(),c),((d),e)))的长度为 1 ,深度为 4 。
10.向一个顺序栈插入一个元素时,首先应 top++ ,然后再将待插入元素 放入栈顶位置 。
11.对于队列,应在 队尾 进行插入,在 队首 进行删除。
12.中缀表达式2+7/(4-1)所对应的后缀表达式为 2 7 4 1 - / + @ 。
数据结构期中考试试题答案
一、 单选题(每小题2分,共8分)
1.在一个长度为n的线性表中顺序查找值为x的元素时,查找成功时的平均查找长度(即x同元素的平均比较次数,假定查找每个元素的概率都相等)为 C 。

数据结构期中测试题答案

数据结构期中测试题答案

《数据结构》期中测试班级:姓名:学号:一、填空题:1、在数据结构中,从逻辑上可以把数据结构分为集合、线性结构、树形结构和图状结构,其中树形结构和图状结构合称为非线性结构。

数据结构被形式地定义为二元组(D,S),其中D是数据元素的有限集合,S是D上关系的有限集合。

2、算法的五个重要特性是有穷性、确定性、可行性、输入和输出。

3、一个顺序表第一个元素的存储地址是100,每个元素的长度为3,则第6个元素的地址是115。

在顺序表中插入或删除一个元素,需要平均移动(n+1)/2个元素,具体移动的元素个数与插入或删除元素的位置有关。

顺序表中逻辑上相邻的元素的物理位置相邻。

单链表中逻辑上相邻的元素的物理位置不一定相邻。

单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的指针域指示。

在单链表中设置头结点的作用是使第一个结点与其他结点的操作统一。

4、从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较(n+1)/2个结点。

在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是O(n)。

给定有n个元素的线性表,建立一个有序单链表的时间复杂度是O(n2)。

5、已知L是无表头结点的非空单链表,且指针p所指结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

在p所指结点后插入s所指结点:4、1。

在p所指结点前插入s所指结点:7、11、8、4、1。

在表首插入s所指结点:5、12。

在表尾插入s所指结点:11、9、1、6。

1)p->next=s;2)p->next=p->next->next;3)p->next=s->next;4)s->next=p->next;5)s->next=L;6)s->next=NULL;7)q=p;8)while(p->next!=q) p=p->next;9)while(p->next!=NULL) p=p->next;10)p=q;11)p=L;12)L=s;13)L=p;6、已知指针p所指结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。

级本1数据结构期中试题参考答案

级本1数据结构期中试题参考答案

级本1数据结构期中试题参考答案一、填空题(每空2分,共32分)1.按照数据结构中元素逻辑关系的不同,我们将数据结构分成:线性和非线性两大类。

2.在一个长度为n的顺序表中删除第pos(0<=pos<n)个位置上的元素,需移动的元素个数为< p="">n-pos-1 。

3.Evaluate the postfix expression: 2 4 3 1 + * + , where each number represents an operand and each symbol of + or * represents an operator, please give the result of the expression on the following line 18 。

4.设以下算法中所用到的栈和队列元素类型一致,类型名为StackQueue_entry,请问该算法的功能为: 栈S元素逆置___。

Error_code algo1(Stack &S){StackQueue_entry item;Queue Q;while (!S.empty() { S.top(item); S.pop( );Q.append(item); }while (!Q.empty() { Q.retrieve(item); Q.serve( );S.push(item); } return success;}5.请在下列String类的构造函数中填空:String::String(List& in_list){length=in_list.size();entries=new char[length+1];for (int i=0;i<length;i++)< p="">in_list.retrieve(i,entry[i]); ;entries[length]= ‘\0’;6.栈中元素的操作原则是LIFO ,在出栈算法中需要判断栈是否为空。

数据结构期中题库及答案

数据结构期中题库及答案

、判断题:1、线性表的逻辑顺序与物理顺序总是一致的。

()2、线性表的顺序存储表示优于链式存储表示。

()3、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。

()4、二维数组是其数组元素为线性表的线性表。

()5、每种数据结构都应具备三种基本运算:插入、删除和搜索。

()6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个方面。

()7、线性表中的每个结点最多只有一个前驱和一个后继。

()&线性的数据结构可以顺序存储,也可以链接存储。

非线性的数据结构只能链接存储。

()9、栈和队列逻辑上都是线性表。

()10、单链表从任何一个结点出发,都能访问到所有结点()11、删除二叉排序树中一个结点,再重新插入上去,一定能得到原来的二叉排序树。

()12、快速排序是排序算法中最快的一种。

()13、多维数组是向量的推广。

()14、一般树和二叉树的结点数目都可以为0。

()15、直接选择排序是一种不稳定的排序方法。

()16、98、对一个堆按层次遍历,不一定能得到一个有序序列。

()17、在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk 个,则有n0=nk+1。

()18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。

()19、堆栈在数据中的存储原则是先进先出。

()20、队列在数据中的存储原则是后进先出。

()21、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。

()22、哈夫曼树一定是满二叉树。

()23、程序是用计算机语言表述的算法。

()24、线性表的顺序存储结构是通过数据元素的存储地址直接反映数据元素的逻辑关系。

()25、用一组地址连续的存储单元存放的元素一定构成线性表。

()26、堆栈、队列和数组的逻辑结构都是线性表结构。

()27、给定一组权值,可以唯一构造出一棵哈夫曼树。

()28、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.写出下述算法A的功能:
其中BiTree定义如下:
Typedef struct BiTNode{
TElemType data;
struct BiTNode *LChild, *RChild;
}BiTNode, *BiTree;
Status A(BiTree T)
{
Queue Q;
InitQueue(Q);
得分
评卷人
四、阅读算法(每小题5分,共25分)
1.void AE(Stack& S){
InitStack(S);
Push(S,3);
Push(S,4);
int x=Pop(S)+2*Pop(S);
Push(S,x);
int i,a[5]={1,5,8,12,15};
for(i=0;i<5;i++) Push(S,2*a[i]);
weight
Parent
Lchild
Rchild
weight
Parent
Lchild
Rchild
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
5
0
0
0
29
0
0
0
7
0
0
0
8
0
0
0
14
0
0
0
23
0
0
0
3
0
0
0
11
0
0
0
--
0
0
0
--
0
0
0
--
0
0
0
--
0
0
0
--
0
0
0
--
0
0
0
--
0
0
0
1
2
3
4
5
6
7
8
9
10
(1)InitList(La);
Int a[]={100,26,57,34,79};(1)79 34 57 26 100
For (i=0;i<5;i++)
ListInsert(La,1,a[i]);//逆序;
(2)ListDelete(La,1,e);//e=79;(2)34 57 26 100 79
11
12
13
14
15
5
9
0ቤተ መጻሕፍቲ ባይዱ
0
29
14
0
0
7
10
0
0
8
10
0
0
14
12
0
0
23
13
0
0
3
9
0
0
11
11
0
0
8
11
1
7
15
12
3
4
19
13
8
9
29
14
5
10
42
15
6
11
58
15
2
12
100
0
13
14
3、内存中一片连续空间(不妨假设地址从1到m)提供给两个栈s1和s2使用,怎样分配这部分存储空间,使得对任一栈,仅当这部分空间全满时才发生上溢。如何判断栈满,栈空,并对两个栈的容量进行分析。(7分)
ENQueue(Q,T);
While(not QueueEmpty(Q))
{ DeQueue(Q,e);
If(e==NULL) break;
Else
{ Print(e.data);
ENQueue(Q,e.LChild);
ENQueue(Q.e.RChild);
}
}
}
答:层次遍历二叉树的非递归算法
得分
答:选择顺序存储。因为顺序存储可以通过下标随意访问线性表中的元素,效率较高。而链式存储要访问某个元素是,需要遍历链表来找到这个元素,效率比较低。
选择顺序存储结构;理由有两点(1)主要从插入删除操作在移动元素的个数上分析,(2)顺序存储定位块,可直接定位。
2、哈夫曼树在构造时,首先进行初始化存储空间,结果如左下图,当构造完成后,请填写最后状态表,如右下图。(6分)(见课本P148)
{
cerr<<"Memory allocation failare!"<<endl;
exit(1);
}
________newptr->data=item;_______
newptr->next=NULL;
if (HL==NULL)
HL=__newptr___________;
else{
LNode* P=HL;
2.编写算法计算给定二叉树中叶结点的个数。
其中树节点定义如下
typedef struct BiTNode{
DataType data;
Struct BiTNode *LChild, * RChild;
typedefstruct LNode
{
ElemType data;
Struct LNode* next;
}*List, LNode;
函数定义:voidinvert(List& L)
voidinvert(List& L)//链表的就地逆置;带头结点的单链表;
{
p=L->next; q=p->next; s=q->next; p->next=NULL;
return(1);
}
2.向单链表的末尾添加一个元素的算法。
LNode是一个包含(data,Next)的结构体
Void InsertRear(LNode*& HL,const ElemType& item)
{
LNode* newptr;
newptr=new LNode;
If (____newptr==NULL__________)
B线性表是具有n(n>=0)个元素的一个有限序列
C线性表就是顺序存储的表(可以是链式存储结构)
D线性表只能用顺序存储结构实现(可以是链式存储结构)
2、表长为n的顺序存储的线性表,当在任何一个位置上插入或者删除一个元素的概率相等时,删除一个元素需要移动元素的平均个数为(A)
A (n-1)/2B n/2 Cn D n-1
评卷人
五、算法填空(每空1分,共9分)
1.堆分配存储方式下,串连接函数。
typedef struct
{
char * ch;
int len;
} HString;
HString *s,t;
StatusStrCat(s,t) /*将串t连接在串s的后面*/
{
int i;
char *temp;
temp=(char*)malloc(s->len+t.len);
初始条件:线性表L已存在,
1≤i≤ListLength ( L )+1。
操作结果:在L中第i个位置之前插入新的
数据元素e , L的长度加1。
ListDelete( &L , i , &e ) //删除
初始条件:线性表L已存在且非空,
1≤i≤ListLength( L )。
操作结果:删除L的第i个数据元素,并
while(!StackEmpty(S)) cout<<Pop(S)<<' ';
}
该算法被调用后得到的输出结果为:
答:30、24、16、10、2、10
2.void ABC (BTNode *BT,int &c1,int &c2) {
if (BT !=NULL ) {
ABC(BT->left,c1,c2);
容量分析:
从低地址向高地址增长时,容量为栈顶top的值;
从高地址往低地址存放时,容量为m+1-(栈顶top的值)。
4、设某二叉树的前序遍历序列为:ABCDEFGHI,中序遍历序列为:BCAEDGHFI。(1)试画出该二叉树;(2)画出该二叉树后序线索化图。(3)试画出该二叉树对应的森林。(10分)
(1)(3)(四棵树)
c1++;
if (BT->left==NULL&&BT->right==NULL) c2++;
ABC(BT->right,c1,c2);
}//if
}
该函数执行的功能是什么?
答:该函数的功能是统计,二叉树结点总数,和叶子结点总数。
c1为二叉树结点数,c2为二叉树中叶子结点数
3.在下面的每个程序段中,假定线性表La的类型为List,e的类型为ElemType,元素类型ElemType为int,并假定每个程序段是连续执行的。试写出每个程序段执行后所得到的线性表La。
s->LLink=p;s->RLink=p->RLink;
Cs->LLink=p; s->RLink=p->RLink;
p->RLink=s;p->RLink->LLink=s;
Ds->LLink=p; s->RLink=p->RLink;
p->RLink->LLink=s; p->RLink=s;
else return 0;//为合数;
}
(1)指出该算法的功能;
(2)该算法的时间复杂度是多少?
相关文档
最新文档