第二章测试题参考答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (p->data=q->data)
{
r->next=p;
r=p;
p=p->next;
q=q->next;
}
else if (p->data<=q->data)
{
r->next=p;
r=p;
p=p->next;
}
else
{
r->next=q;
r=q;
q=q->next;
}
if (p= =NULL)
解:这里采用链表合并的方法,设原两链表的头指针分别为p和q,每次比较p->data和q->data的值,把值较小的结点作为新链表的结点,这一过程直到一个链表为空为止。当一个链表为空而另一个链表不为空时,只要将不空的链表指针赋给新链表中最后一个结点的指针即可。实现本题功能的函数如下:
解:结点结构定义如下:
2.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较__(n+1)/2___个结点。
3.在一个长度为n的线性表(采用顺序存储结构)中删除第i个元素(1≤i≤n)时,需向前移动__n-i__个元素。
4.当对一个线性表经常进行存取操作,而很少进行插入和删除操作时,则采用_顺序_存储结构为宜。相反,当经常进行的是插入和删除操作时,则采用_链式___存储结构为宜。
vold converts(seqlist L)
{
k=L.length;
m=k/2;
for(i = 0;i<m;i++)
{
x=L.element[i];
L.element[i] = L.element[k-i-1];
L.element[k-i-1] = x;
}
}
解法2:用数据类型描述LinkList链式存储结构:
A.s->next=p->next;p->next=s; B.p->next=s->next;s->next=p;
C.q->next=s;s->next=p; D.p->next=s; s->next=q;
二、填空题(每小题5分)
1.给定有n个结点的向量,建立一个单链表的时间复杂度_O(n)_。建立一个有序单链表的时间复杂度_O(n2)___。
第二章测试题参考答案
一、选择题(每小题5分)
1.线性表Baidu Nhomakorabea(A)。
A一个有限序列,可以为空;B一个有限序列,不能为空;
C一个无限序列,可以为空;D一个无序序列,不能为空。
2.用链表表示线性表的优点是(C)。
A便于随机存取
B花费的存储空间较顺序存储少
C便于插入和删除
D数据元素的物理顺序与逻辑顺序相同
3.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用(D)存储方式最节省运算时间。
A单链表
B双链表
C单循环链表
D带头结点的双循环链表
4.带头结点的单链表head为空的判定条件是(B)。
A.head==NULL; B.head->next==NULL;
C.head->next==head;D.head!=NULL;
5.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行(C)。
}
while(head != s)
{
p=head;
head=head->next;
p->next=s->next;
s->next=p;
}
return s;
}
2.已知两个整数集合A和B,它们的元素分别依元素值递增有序存放在两个单链表HA和HB中,编写一个函数求出这两个集合的并集C,并要求集合C的链表的结点仍依元素值递增有序存放。(注意:并集不是归并)
r->next=q;
if (q= =NULL)
r->next=p;
return h;
}
structnode
{
ElemTypes;
structnode*next;
};
node *mergelink(p, q)
{
node *p, *q;
node *h, *r;
h=(node *)malloc(sizeof(node));
h->next=NULL;
r=h;
while (p!=NULL && q!=NULL)
struct LinkList
{
ElemTypes;
struct LinkList *next;
};
LinkList *daozhi(LinkList *head,int n)
{
int i;
LinkList *p,*q,*s;
s=head;
while(s->next != NULL)
{
s=s->next;
5.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的n/2个元素。
三、算法设计题(每小题25分)
1.设有一个用向量表示的线性表L,要求写出一个将该表逆置的过程,允许在原表的存储空间外再增加一个附加的工作单元。
解法一:用数据类型描述Seqlist顺序存储结构:
{
r->next=p;
r=p;
p=p->next;
q=q->next;
}
else if (p->data<=q->data)
{
r->next=p;
r=p;
p=p->next;
}
else
{
r->next=q;
r=q;
q=q->next;
}
if (p= =NULL)
解:这里采用链表合并的方法,设原两链表的头指针分别为p和q,每次比较p->data和q->data的值,把值较小的结点作为新链表的结点,这一过程直到一个链表为空为止。当一个链表为空而另一个链表不为空时,只要将不空的链表指针赋给新链表中最后一个结点的指针即可。实现本题功能的函数如下:
解:结点结构定义如下:
2.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较__(n+1)/2___个结点。
3.在一个长度为n的线性表(采用顺序存储结构)中删除第i个元素(1≤i≤n)时,需向前移动__n-i__个元素。
4.当对一个线性表经常进行存取操作,而很少进行插入和删除操作时,则采用_顺序_存储结构为宜。相反,当经常进行的是插入和删除操作时,则采用_链式___存储结构为宜。
vold converts(seqlist L)
{
k=L.length;
m=k/2;
for(i = 0;i<m;i++)
{
x=L.element[i];
L.element[i] = L.element[k-i-1];
L.element[k-i-1] = x;
}
}
解法2:用数据类型描述LinkList链式存储结构:
A.s->next=p->next;p->next=s; B.p->next=s->next;s->next=p;
C.q->next=s;s->next=p; D.p->next=s; s->next=q;
二、填空题(每小题5分)
1.给定有n个结点的向量,建立一个单链表的时间复杂度_O(n)_。建立一个有序单链表的时间复杂度_O(n2)___。
第二章测试题参考答案
一、选择题(每小题5分)
1.线性表Baidu Nhomakorabea(A)。
A一个有限序列,可以为空;B一个有限序列,不能为空;
C一个无限序列,可以为空;D一个无序序列,不能为空。
2.用链表表示线性表的优点是(C)。
A便于随机存取
B花费的存储空间较顺序存储少
C便于插入和删除
D数据元素的物理顺序与逻辑顺序相同
3.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用(D)存储方式最节省运算时间。
A单链表
B双链表
C单循环链表
D带头结点的双循环链表
4.带头结点的单链表head为空的判定条件是(B)。
A.head==NULL; B.head->next==NULL;
C.head->next==head;D.head!=NULL;
5.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行(C)。
}
while(head != s)
{
p=head;
head=head->next;
p->next=s->next;
s->next=p;
}
return s;
}
2.已知两个整数集合A和B,它们的元素分别依元素值递增有序存放在两个单链表HA和HB中,编写一个函数求出这两个集合的并集C,并要求集合C的链表的结点仍依元素值递增有序存放。(注意:并集不是归并)
r->next=q;
if (q= =NULL)
r->next=p;
return h;
}
structnode
{
ElemTypes;
structnode*next;
};
node *mergelink(p, q)
{
node *p, *q;
node *h, *r;
h=(node *)malloc(sizeof(node));
h->next=NULL;
r=h;
while (p!=NULL && q!=NULL)
struct LinkList
{
ElemTypes;
struct LinkList *next;
};
LinkList *daozhi(LinkList *head,int n)
{
int i;
LinkList *p,*q,*s;
s=head;
while(s->next != NULL)
{
s=s->next;
5.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的n/2个元素。
三、算法设计题(每小题25分)
1.设有一个用向量表示的线性表L,要求写出一个将该表逆置的过程,允许在原表的存储空间外再增加一个附加的工作单元。
解法一:用数据类型描述Seqlist顺序存储结构: