数据结构前两年的期中考试题型

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

2010-2011第一学期数据结构期中考试题 [原

创 2010-10-29 12:36:57]

字号:大中小在以下题目中任意选择做

1.求下列程序段的时间复杂度(每小题5分,最多选做2题,多做不给分)

(1)i=1;

WHILE (i

(2)下面程序段的时间复杂度为( )

s=0;

for(i=1;i

for(j=1;j

s+=i*j;

(3)int x=n;

int y=0;

while(x>=(y+1)*(y+1))

y++;

2.按增长率从小到大顺序排列以下函数(5分)

1、按增长率由小至大的顺序排列下列各函数:

2100, (3/2)n, (2/3)n, n n , n(1/2), n! , 2n , lgn , n lgn , n(3/2)

3.问答题

(1).若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么?(5分)

(2).双向链表中有两个指针域,prep和next,分别指回前驱及后继,设p指向链表中的一个结点,q指向一待插入结点,现要求在p前插入q,请写出其插入操作序列。(6分)(3).设单链表的结点结构为(data,next),data为整数,next为指针域,已知指针px 指向单链表中data为x的结点,指针py指向data为y的新结点,请写出将py指向结点插入为px指向结点的直接后继所执行的语句。(6分)

(4). 若串S1=“I am a teacher”, S2=“teacher” ,S3=“student”执行

replace(S1,0,substr(S1,length(S2),length(S3)),S3)后,其结果是什么?(5分)(5).假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为118,请求出Loc[5,15]的值。(5分)

(6). 有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是多少?(5分)

(7)下列二分搜索算法BinarySearch是否正确,请说明原因。(6分)

int BinarySearch(Datatype a[],Datatype x,int n)

{

int left=0;int right=n-1;

int middle;

while(left<=right)

{

middle =(left+right)/2

if(x==a[middle])return middle;

if(x>a[middle])left=middle;

else right=middle;

}

return -1

}

(8)阅读下面的算法(15分)

LinkList mynote(LinkList L)

{//L是不带头结点的单链表的头指针

if(L&&L->next){

q=L;L=L->next;p=L;

S1: while(p->next) p=p->next;

S2: p->next=q;q->next=NULL;

}

return L;

}

请回答下列问题:

(1)说明语句S1的功能;

(2)说明语句组S2的功能;

(3)设链表表示的线性表为(a1,a2, …,an),写出算法执行后的返回值所表示的线性表。

4.填空与选择

(1).以下程序采用链表合并的方法,将两个已排序的单链表合并成一个链表而不改变其排序性(升序),这里两链表的头指针分别为p和q.(每空3分)

void mergelink(SLNode *p, SLNode *q)

{

SLNode *h,*r;

//建立头结点(1)______

h->next= NULL;

r=h;

while((p!=NULL)&& (q!=NULL)){

if (p->data<=q->data){

//(2)___;

r=p; p=p->next;

}

else{

//(3)____;

r=q; q:=q->next;

}

};

if(p==NULL) r->next=q;

//(4)____;

}

(以下选择题每题4分)

(1)下面程序段的时间复杂度为()

int f(int n)

{if(n==0 || n==1) return 1;

else return n*f(n-1); }

A. O(1)

B. O(n)

C. O(n2)

D. O(n!)

(2)设栈的输入序列为(1,2,3,4),则()不可能是输出序列。

A.1423

B.2134

C.1432

D.3214

(3)假设以数组A[m]存放循环队列的元素。已知队列的长度为length,指针rear指向队尾元素的下一个存储位置,则队头元素所在的存储位置为( )

A.(rear-length+m+1)%m

B.(rear-length+m)%m

C.(rear-length+m-1)%m

D.(rear-length)%m

(4)判定一个顺序循环队列q(数据元素最多为Max)为队满的条件是()。

A. q.real-q.front=Max

B.q.front=q.rear

C.q.rear-q.front-1=Max

D.q.front=(q.rear+1)%Max

5.程序设计题

相关文档
最新文档