数据结构期中考试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单项选择题(每小题3分,共30分)
1、线性结构是数据元素之间存在的一种_______。

A、一对多关系
B、多对多关系
C、多对一关系
D、一对一关系
2、以下数据结构中,哪一个不是线性结构()
A.生成树 B. 顺序栈 C. 单链
表 D. 循环队列
3、设n是偶数,则运行下列程序段的时间复杂度为()。

x=100;
for(p=2;p<=n;p++)
for(q=2*i;q<=n;q++)
x=(x+1)*3;
A.O(1) B.O(n) C.O(n2) D.O(lbn)
4、若频繁地对线性表进行插入和删除操作,该线性表应该采用——存储结构。

A、散列
B、顺序
C、链式
D、索引
5、在非空双向循环链表中由q所指的链结点后面插入一个由p所指的链结点的动作依次
为:p->llink=Q;p->rlink=q->rlink;q->rlink=p;_______.(空白处为一条赋值语句)
A、q->llink=p
B、q->rlink->llink=p
C、p->rlink->llink=p
D、p->llink->llink=p
6、设循环队列的结构是:
const int Maxsize=100;
typedef int Data Type;
typedef struct {
Data Type data[Maxsize];
Int front, rear;
} Queue;
若有一个Queue类型的队列Q,试问判断队列满的条件应是下列哪一个语句()
A 、Q.front= = Q.rear; B、Q.front - Q.rear= = Maxsize;
C、Q.front + Q.rear= = Maxsize;
D、Q.front= = (Q.rear+1)% Maxsize;
7、已知L是一个不带表头的单链表, 在表首插入结点*p的操作是()。

A. p = L; p->next = L;
B. p->next = L; p = L;
C. p->next = L; L = p;
D. L = p; p->next= L;
8、下面关于串的叙述中,哪一个是不正确的?( )
A.串是字符的有限序列 B.空串是由空格构成的串
C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储
9、若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( )。

A.3,2,6,1,4,5 B.3,4,2,1,6,5
C.1,2,5,3,4,6 D.5,6,4,2,3,1
10、循环队列存储在数组A[0..m-1]中,则入队时需做的操作为()。

A. rear=rear+1
B. rear=(rear+1)%(m-1)
C. rear=(rear+1)%m
D. rear=(rear+1)%(m+1)
二、填空题(每空3分,共30分)
判队满:front==(rear+1)%MaxQueueSize
判队空:rear==front
2.按增长率从小到大顺序排列以下函数(5分)
n, n-n4+7n5, nlogn, 2n/3, n4, logn, n1/3+logn, (3/2)n, n!, n2+logn
logn<n<n1/3+logn<nlogn<n2+logn<n4<n-n4+7n5<2n/3< (3/2)n< n!
3.设有一个递归算法如下(11分)
int x (int n)
{
if (n<=3) return 1;
else return x(n-2)+x(n-4)+1;
}
试问计算x(x(8))时需要计算(18 )次x函数。

请用图示描述函数的递归调用执行过程。

4.求下列程序的时间复杂度(4分)
(1)i=1;
WHILE (i<n) i=i*2
logn
5.若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么?(5分)
顺序表
四、程序设计题(15分)
1、设单链表L中的结点按data域数值递减排列,试设计一个算法将L中的结点按data域
数值递增加排列,要求算法的时间复杂性为O(n)。

(15分)
见书本答案
2、已知两个单链表A和B,其头指针分别为heada和headb,编写一个函数实现按data域的大小进行合并,实现从小到大的排序。

(15分)
typedef struct linknode
{ elemtype data;
struct linknode *next;
}Lnode;
void MergeList_L(SLNode *La, SLNode *Lb, SLNode **Lc )
//已知单链线性表La和Lb的元素按值非递减排列。

归并为Lc后也按值非递减排列。

//要求Lc中的数据元素可以相等
{ SLNode *pa,*pb,*pc;
pa=La->next;
pb=Lb->next;
*Lc=pc=La; //Lc的头结点利用La的头结点
while( pa && pb ) //将pa 、pb结点按大小依次插入Lc中
{ if( pa->data<=pb->data )
{ pc->next=pa;
pc=pa;
pa=pa->next; }
else
{ pc->next=pb;
pc=pb;
pb=pb->next; } }
pc->next = pa ? pa: pb ; //插入非空表的剩余段
free(Lb); //释放Lb的头结点
}
有一个单链表(至少有一个结点),其头结点指针为head,编写一个函数将L逆置!。

相关文档
最新文档