数据结构期中测试题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》期中测试
班级:姓名:学号:
一、填空题:
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所指结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句
序列。
在p所指结点后插入s所指结点的语句序列是7、12、6、3。
在p所指结点前插入s所指结点的语句序列是8、13、5、4。
删除p所指结点的直接后继结点的语句序列是15、p->next=q->next、q->next->prior=p、18。???
删除p所指结点的直接前驱结点的语句序列是16、p->prior=q->prior、q->prior->next=p、18。???
删除p所指结点的语句序列是1、2、17。
1)p->next=p->next->next;
2)p->prior=p->prior->prior;
3)p->next=s;
4)p->prior=s;
5)s->next=p;
6)s->prior=p;
7)s->next=p->next;
8)s->prior=p->prior;
9)p->prior->next=p->next;
10)p->prior->next=p;
11)p->next->prior=p;
12)p->next->prior=s;
13)p->prior->next=s;
14)p->next->prior=p->prior;
15)q=p->next;
16)q=p->prior;
17)free(p);
18)free(q);
7、简述以下算法的功能。
Status algo1(Stack S){
int i,n,A[255];
n=0;
while(!StackEmpty(S)) {n++; Pop(S,A[n]);}
for(i=1;i<=n;i++) Push(S,A[i]);}
该算法的功能是:利用数组A将栈S中的数据倒置。
Status algo2(Stack S,int e){
Stack t; int d;
InitStack(T);
while(!StackEmpty(S)){
Pop(S,d);
if(d!=e) Push(T,d);}
while(!StackEmpty(T)){
Pop(T,d);
Push(S,d);}
}
该算法的功能是:利用栈T辅助将栈S中所有值为e的数据元素删除。
8、写出下列程序段的输出结果。
main(){
Stack S; char x,y;
InitStack(S);
x=’c’; y=’k’;
push(S,x); push(S,’a’); push(S,y);
pop(S,x); push(S,’t’); push(S,x);
pop(S,x); push(S,’s’);
while(!StackEmpty(S)) {pop(S,y); printf(y);}
printf(x);}
该程序段的输出结果是:stack。
main(){
Queue Q; InitQueue(Q);
char x=’e’,y=’c’;
EnQueue(Q,’h’); EnQueue(Q,’r’); EnQueue(Q,y);
DeQueue(Q,x); EnQueue(Q,x);
DeQueue(Q,x); EnQueue(Q,’a’);
while(!QueueEmpty(Q)){
DeQueue(Q,y);
printf(y);}
printf(x);}
该程序段的输出结果是:char。
9、设串s1=’ABCDEFG’,s2=’PQRST’,则函数
concat(substring(s1,2,stringlength(s2)),substring(s1,stringlength(s2),2))的结果串是’BCDEFEF’。串的两种最基本的存储方式是顺序存储方式和链接存储方式。两个串相等的充分必要条件是两个串的长度相等且对应位置的字符相同。
10、在栈顶指针为top的顺序栈中,判定栈空的条件是top=base;在栈顶指针为top
的链栈中,判定栈空的条件是top=NULL。设循环队列的队首指针和队尾指针分别为front 和rear,其大小为MAXQSIZE,则队列中的元素个数是