线性表 0812年试题及参考答案电子教案.docx

上传人:b****3 文档编号:1359696 上传时间:2022-10-21 格式:DOCX 页数:18 大小:51.19KB
下载 相关 举报
线性表 0812年试题及参考答案电子教案.docx_第1页
第1页 / 共18页
线性表 0812年试题及参考答案电子教案.docx_第2页
第2页 / 共18页
线性表 0812年试题及参考答案电子教案.docx_第3页
第3页 / 共18页
线性表 0812年试题及参考答案电子教案.docx_第4页
第4页 / 共18页
线性表 0812年试题及参考答案电子教案.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

线性表 0812年试题及参考答案电子教案.docx

《线性表 0812年试题及参考答案电子教案.docx》由会员分享,可在线阅读,更多相关《线性表 0812年试题及参考答案电子教案.docx(18页珍藏版)》请在冰豆网上搜索。

线性表 0812年试题及参考答案电子教案.docx

线性表0812年试题及参考答案电子教案

第2章线性表08-12年1月试题及参考答案

(2008年1月)

2、在下列对顺序表进行的操作中,算法时间复杂度为O

(1)的是(   )

A、访问第i个元素的前驱(1<)

B、在第i个元素之后插入一个新元素()

C、删除第i个元素()

D、对顺序表中元素进行排序

3、假设带头结点的单向循环链表的头指针为head,则该链表为空的判定条件是(   )

A、head==NULLB、head–>next==NULL

C、head!

=NULLD、head–>next==head

17、输入线性表的n个元素建立带头结点的单链表,其时间复杂度为___________。

30、假设以带头结点的单链表表示线性表,阅读下列算法f30,并回答问题:

(1)设线性表为(a1,a2,a3,a4,a5,a6,a7),写出执行算法f30后的线性表;

(2)简述算法f30的功能。

voidf30(LinkListL)

{

//L为带头结点单链表的头指针

LinkListp,q;

p=L;

while(p&&p–>next){

q=p–>next;

p–>next=q–>next;

p=q–>next;

free(q);

}

}

(1)

(2)

34、假设以单链表表示线性表,单链表的类型定义如下:

typedefstructnode{

DataTypedata;

structnode*next;

}LinkNode,*LinkList;

编写算法,将一个头指针为head且不带头结点的单链表改造为一个含头结点且头指针仍为head的单向循环链表,并分析算法的时间复杂度。

(2008年10月)

3、在头指针为head的非空单循环链表中,指针p指向尾结点,下列关系成立的是()

A、p->next==headB、p->next->next==head

C、p->next==NULLD、p==head

17、将两个长度分别为m和n的递增有序单链表,归并成一个按元素递减有序的单链表,可能达到的最好的时间复杂度是。

30、已知线性表的存储结构为顺序表,阅读下列算法,并回答问题:

(1)设线性表L=(21,-7,-8,19,0,-11,34,30,-10),写出执行f30(&L)后的L状态;

(2)简述算法f30的功能。

voidf30(SeqList*L){

inti,j;

for(i=j=0;ilength;i++)

if(L->data[i]>=0){

if(i!

=j)L->data[j]=L->data[i];

j++;

}

L->length=j;

}

(1)

(2)

(2009年1月)

2、假设某个带头结点的单链表的头指针为head,则判定该表为空表的条件是()

A、head==NULL;B、head->next==NULL;

C、head!

=NULL;D、head->next==head;

17、在双向循环链表中插入一个新的结点时,应修改_________个指针域的值。

30、假设以带头结点的单链表表示线性表,单链表的类型定义如下:

typedefintDataType;

typedefstructnode{

DataTypedata;

structnode*next;

}LinkNode,*LinkList;

阅读下列算法,并回答问题:

(1)已知初始链表如图所示,画出执行f30(head)之后的链表;

题30图

(2)简述算法f30的功能。

voidf30(LinkListhead)

{LinkListp,r,s;

if(head->next)

{

r=head->next;

p=r->next;

r->next=NULL;

while(p)

{

s=p;

p=p->next;

if(s->data%2==0)

{

s->next=head->next;

head->next=s;

}

else

{

s->next=r->next;

r->next=s;

r=s;

}

}

}

}

(1)

(2)

34、假设以带头结点的单链表表示线性表,单链表的类型定义如下:

typedefintDataType;

typedefstructnode{

DataTypedata;

structnode*next;

}LinkNode,*LinkList;

编写算法,删除线性表中最大元素(假设最大值唯一存在)。

函数原型为:

voidf34(LinkListhead);

(2009年10月)

3、指针p、q和r依次指向某循环链表中三个相邻的结点,交换结点*q和结点*r在表中次序的程序段是(   )

A、p->next=r;q->next=r->next;r->next=q;

B、p->next=r;r->next=q;q->next=r->next;

C、r->next=q;q->next=r->next;p->next=r;

D、r->next=q;p->next=r;q->next=r->next;

17、如果需要对线性表频繁进行________或________操作,则不宜采用顺序存储结构。

31、假设学生成绩按学号增序存储在带头结点的单链表中,类型定义如下:

typedefstructNode{

intid;/*学号*/

intscore;/*成绩*/

structNode*next;

}LNode,*LinkList;

阅读算法f31,并回答问题:

(1)设结点结构为,成绩链表A和B如图所示,画出执行算法

f31(A,B)后A所指的链表;

(2)简述算法f31的功能。

voidf31(LinkListA,LinkListB)

{

LinkListp,q;

p=A->next;

q=B->next;

while(p&&q)

{

if(p->idid)

p=p->next;

elseif(p->id>q->id)

q=q->next;

else

{

if(p->score<60)

if(q->score<60)

p->score=q->score;

elsep->score=60;

p=p->next;

q=q->next;

}

}

}

34、假设线性表采用顺序存储结构,其类型定义如下:

#defineListSize100

typedefstruct{

intdata[ListSize];

intlength;

}SeqList,*Table;

编写算法,将顺序表L中所有值为奇数的元素调整到表的前端。

(2010年1月)

3、将长度为n的单链表连接在长度为m的单链表之后,其算法的时间复杂度为()

A、O

(1)B、O(m)C、O(n)D、O(m+n)

4、在带头结点的双向循环链表中插入一个新结点,需要修改的指针域数量是()

A、2个B、3个C、4个D、6个

17、长度为n的线性表采用单链表结构存储时,在等概率情况下查找第i个元素的时间复杂度是_________。

30、已知下列程序,Ls指向带头结点的单链表。

Typedefstructnode{

DataTypedata;

structnode*next;

}*LinkList;

voidf30(LinkListLs)

{

LinkListp,q;

q=Ls->next;

if(q&&q->next)

{

Ls->next=q->next;

p=q

while(p->next)

p=p->next;

p->next=q;

q->next=NULL;

}

}

请回答下列问题:

(1)当Ls指向的链表如下图所示,请画出执行本函数之后的链表的结果。

(2)请简述算法的功能。

(2010年10月)

2、若对某线性表最常用的操作是在最后一个结点之后插入一个新结点或删除最后一个结点,要使操作时间最少,下列选项中,应选择的存储结构是()

A、无头结点的单向链表B、带头结点的单向链表

C、带头结点的双循环链表D、带头结点的单循环链表

3、若带头结点的单链表的头指针为head,则判断链表是否为空的条件是()

A、head=NULLB、head->next=NULL

C、head!

=NULLD、head->next!

=head

17、已知链表结点定义如下:

typedefstructnode{

chardata[16];

structnode*next;

}LinkStrNode;

如果每个字符占1个字节,指针占4个字节,则该链表的存储密度是___________。

30、已知线性表(a1,a2,a3,…,an)按顺序存放在数组a中,每个元素均为整数,下列程序的功能是将所有小于0的元素移到全部大于等于0的元素之前。

例如,有7个整数的原始序列为(x,x,-x,-x,x,x,-x),变换后数组中保存的序列是(-x,-x,-x,x,x,x,x)。

请在程序处填入合适的内容,使其成为完整的算法。

f30(inta[],intn)

{intk,m,temp;

m=

(1);

while(a[m]<0&&m

m=

(2);

k=m;

while(k

{while(a[k]>=0&&k

k=(3);

if(k

{temp=a[k];

a[k]=a[m];

a[m]=(4);

m=(5);

}

}

}

(1)

(2)

(3)

(4)

(5)

33、设有单链表类型定义如下:

typedefstructnode{

intdata;

structnode*next;

}*LinkList;

阅读下列算法,并回答问题:

voidf33(LinkListhead,intA,intB)

{

LinkListp=NULL;

While(head!

=NULL)

{

if(head->data>A&&head->data

p=head;

head=head->next;

}

if(p!

=NULL)

printf("%d\n",p->data);

}

(1)已知链表h如下图所示,给出执行f33(h,5,8)之后的输出结果;

(2)简述算法f33的功能。

(2011年1月)

2、将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是()

A、n-1B、nC、2n-1D、2n

17、在单链表中某结点后插入一个新结点,需要修改_______________个结点指针域的值。

32、阅读下列程序。

voidf32(intA[],intn)

{

inti,j,m=l,t;

for(i=0;i

{

for(j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1