数据结构考试考试带答案.docx
《数据结构考试考试带答案.docx》由会员分享,可在线阅读,更多相关《数据结构考试考试带答案.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构考试考试带答案
数据结构考试考试(带答案)
作者:
日期:
XX科技大学成都学院二零零八至二零零九学年第一学期数据结构课堂测试(60分钟)闭卷考试时间:
题号
-一一
-二二
-三
总分
评卷教师
分数
一•填空题(每空2分,共40分);
1.数据结构算法中,通常用时间复杂度和__空间复杂度两种方法衡量其效
率。
2.下面程序段的时间复杂度为_0(n)。
(n>1)
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
x=x+1;
3.静态链表中指针表示的是一结点的地址。
4.线型表、栈和队列都是线型•吉构,可以在线型表的任意__
位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队
列只能在队尾―插入元素和队头删除元素。
5.在具有n个单元的循环队列中,队满时共有n-1个元素。
6.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动n-i+1个兀素。
7.在n个结点的单链表中要删除已知结点*p,需找到它的驱<
8.带有一个头结点的单链表head为空的条件是head->next=
=NULL。
9.在栈顶指针为hs的链栈中,判断栈空的条件是hs=
=NULL_
10.在hq的链队列中,判定只有一个结点的条件是
__hq.front->next==hq.rear。
11.非空的循环单链表head的尾结点(由p指向),满足条件p->next==head
12.两个串相等的充分必要条件是串长相等且对应字符相等。
13.空串是度为0的串其长度等于—0。
14.空格串是由空格字符组成的串,其长度等于空格的个数
•单项选择题(每题2分,共30分);(说明:
请将答案填入下表中)
题号
1
2
3
4
5
6
7
8
9
10
答案
A
A
B
B
D
B
C
B
B
C
题号
11
12
13
14
15
答案
A
A
C
D
D
表元编号
结点
表元间关系
1
a1
3
2
as
1
3
a3
2
A.循环链表B•单链表C•双向循环链表D•双向链表
有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?
(B)
A.543612B.346521C.453126D.234
156
若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i
=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是(B)。
A.top[2]-top[1]|=0B.top[1]+1=top[2]
C.top[1]+top[2]=mD.top[1]=top[2]
数组Q[n]用来表示一个循环队列,front为当前队列头元素的前一位置,rear为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为(D)
A.rear—frontB.(n+front—rear)%n
C.n+rear—frontD.(n+rear—front)%n
设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,—个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e6,e5,e3,e1则栈S的容量至少应该是(B)。
A.6B.4C.3D.2
在数据结构中,从逻辑上可以把数据结构分成(C)。
A•动态结构和静态结构B•紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
判定一个顺序栈ST(最多元素为N为空的条件是(B)o
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
判定一个循环队列QU最多元素为N)为空的条件是C
A.QU.front==(QU.rear+1)%N
C.QU.front==QU.rear
判定一个循环队列QU(最多元素为m0
A.QU.front==(QU.rear+1)%N
C.QU.front==QU.rearD
14.不带头结点的单链表head为空的判定条件是A
A.head=NULLB.head->next=NULLC.head->next=head
D.head!
=NULL
15.15.在双向链表指针p的结点前插入一个指针q的结点操作是(C)。
A.p->Llink=q;q->Rlink=p;p->Llink->Rlink=q;q->Llink=q;
B.p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;
C.q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;
D.q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;
16.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较___D—结点。
A.nB.n/2C.(n—1)/2
D.(n+1)/2
17.设串s仁'ABCDEFGS2='PQRST',函数con(x,y)返回x和y串的连接串,subs
(s,i,j)返回串s的从序号i的字符开始的j个字符组成的字串,len(s)返回串s的长度,贝Ucon(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果
串是D
A)BCDEFB)BCDEFGC)BCPQRSTD)BCDEFEF
三.综合题(每题6分,共30分
1.线性表具有两种存储方式,即顺序方式和链接方式。
现有一个具有五个元素
的线性表L={23,17,47,05,31},若它以单链表方式存储在下列100〜119号地址空间中,每个结点由数据(占2个字节)和指针(占2个字节,由大写字母表示)组成,如下所示:
100120
47
p
23
q
05
r
31
s
17
t
其中指针p,q,r,s,t的值分别为多少?
该线性表的首结点起始地址为多少?
末结点的起始地址为多少?
(共6分)
2.答:
p=108q=116r=112s=0或
NULL
t=100首址=104末址二112。
3.如果想将输入的一个字符序列逆序输出,如输入“abcdef”,输出“fedcba”,
请分析用线性表、堆栈和队列等方式正确输出的可能性?
(共6分)
线性表是随机存储,可以实现,靠循环变量(j--)从表尾开始打印输出;堆栈是后进先出,也可以实现,靠正序入栈、逆序出栈即可;
队列是先进先出,不易实现
4.写出删除顺序表中第i个元素的算法:
(共6分)
StatusListDelete_sq(SqList&L,inti,ElemType&e)
Statusdel_sqllist(SqList&L,inti,ElemType&e)
{
if(i<1IIi>L.length)returnERROR;
e=L.elem[i];
for(j=i+1;j<=L」ength;j++)
L.elem[j-1]=L.elem[j];
--L.length;
returnOK;
}
5.写出顺序栈的入栈算法(共6分)
StatusPush(SqStack&S,SelemTypee)voidPush(Stack&S,ElemTypee){//在栈顶之上插入元素e为新的栈顶元素
p=newLNode;//建新的结点
if(!
p)exit
(1);//存储分配失败
p->data=e;
p->next=S.top;//链接到原来的栈顶
S.top=p;//移动栈顶指针
++S.length;//栈的长度增1
}//Push
6.写出链队列的出队列算法(共6分)
StatusDeQueue(LinkQueue&Q,QelemType&e)
StatusDeQueue(LinkQueue&Q,QEIemType&e){
〃若队列不空,则删除Q的队头元素,
〃用e返回其值,并返回0K;否则返回ERROR
if(Q.front==Q.rear)returnERROR;
p=Q.front->next;e=p->data;
Q.front->next=p->next;
if(Q.rear==p)Q.rear=Q.front;
free(p);returnOK;
}
XX科技大学成都学院
t=100
首址=104
末址=112
2008~2009学年第一学期中期试题一一数据结构答案
一.填空题(每题2分,共40分);
题号
参考答案
1
空间复杂度
2
O(n2)
3
下一结点的地址
4
线型,任意,栈顶,队尾,队头
5
n-1
6
n-i+1
7
前驱
8
head->next==NULL
9
hs==NULL
10
hq.front->next==hq.rear
11
p->next==head
12
串长相等且对应字符相等
13
长度为0的串,0
14
由空格字符组成的串,空格的个数
•单项选择题(每题2分,共30分);
题号
1
2
3
4
5
6
7
8
9
10
答案
A
A
B
B
D
B
C
B
B
C
题号
11
12
13
14
15
答案
A
A
C
D
D
•综合题(共30分)
8.线性表是随机存储,可以实现,靠循环变量(j--)从表尾开始打印输出;堆栈是后进先出,也可以实现,靠正序入栈、逆序出栈即可;
队列是先进先出,不易实现。
3.Statusdel_sqllist(SqList&L,inti,ElemType&e)
{
if(i<1IIi>L.length)returnERROR;
e=L.elem[i];
for(j=i+1;j<=L」ength;j++)
L.elem[j-1]=L.elem[j];
--L.length;
returnOK;
}
4.
voidPush(Stack&S,ElemTypee)
{//在栈顶之上插入元素e为新的栈顶元素
p=newLNode;//建新的结点
if(!
p)exit
(1);//存储分配失败
p->data=e;
p->next=S.top;//链接到原来的栈顶
S.top=p;//移动栈顶指针
++S