线性表 0812年试题及参考答案电子教案Word格式文档下载.docx
《线性表 0812年试题及参考答案电子教案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《线性表 0812年试题及参考答案电子教案Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
next){
q=p–>
next;
next=q–>
p=q–>
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;
i<
L->
length;
i++)
if(L->
data[i]>
=0){
if(i!
=j)L->
data[j]=L->
data[i];
j++;
length=j;
(1)
(2)
(2009年1月)
2、假设某个带头结点的单链表的头指针为head,则判定该表为空表的条件是()
A、head==NULL;
B、head->
next==NULL;
=NULL;
D、head->
next==head;
17、在双向循环链表中插入一个新的结点时,应修改_________个指针域的值。
30、假设以带头结点的单链表表示线性表,单链表的类型定义如下:
typedefintDataType;
structnode*next;
}LinkNode,*LinkList;
阅读下列算法,并回答问题:
(1)已知初始链表如图所示,画出执行f30(head)之后的链表;
题30图
voidf30(LinkListhead)
{LinkListp,r,s;
if(head->
next)
r=head->
next;
p=r->
r->
next=NULL;
while(p)
s=p;
p=p->
if(s->
data%2==0)
s->
next=head->
head->
next=s;
else
next=r->
r->
next=s;
r=s;
34、假设以带头结点的单链表表示线性表,单链表的类型定义如下:
编写算法,删除线性表中最大元素(假设最大值唯一存在)。
函数原型为:
voidf34(LinkListhead);
(2009年10月)
3、指针p、q和r依次指向某循环链表中三个相邻的结点,交换结点*q和结点*r在表中次序的程序段是( )
A、p->
next=r;
q->
next=r->
next;
r->
next=q;
B、p->
C、r->
p->
D、r->
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->
q=B->
q)
if(p->
id<
q->
id)
p=p->
elseif(p->
id>
q=q->
else
score<
60)
if(q->
p->
score=q->
score;
elsep->
score=60;
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;
}*LinkList;
voidf30(LinkListLs)
LinkListp,q;
q=Ls->
if(q&
next)
Ls->
next=q->
p=q
while(p->
next)
p=p->
p->
next=q;
q->
next=NULL;
请回答下列问题:
(1)当Ls指向的链表如下图所示,请画出执行本函数之后的链表的结果。
(2)请简述算法的功能。
(2010年10月)
2、若对某线性表最常用的操作是在最后一个结点之后插入一个新结点或删除最后一个结点,要使操作时间最少,下列选项中,应选择的存储结构是()
A、无头结点的单向链表B、带头结点的单向链表
C、带头结点的双循环链表D、带头结点的单循环链表
3、若带头结点的单链表的头指针为head,则判断链表是否为空的条件是()
A、head=NULLB、head->
next=NULL
=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<
n)
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);
(3)
(4)
(5)
33、设有单链表类型定义如下:
intdata;
}*LinkList;
voidf33(LinkListhead,intA,intB)
LinkListp=NULL;
While(head!
=NULL)
if(head->
data>
A&
head->
data<
B)
p=head;
head=head->
if(p!
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<
n-l&
m;
for(j