第二章线性表
一、选择题
1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(  )
(A)110 (B)108(C)100 (D)120
参考答案:B
2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
(A)64(B)63 (C)63.5 (D)7
参考答案:C
3.线性表采用链式存储结构时,其地址()。
(A) 必须是连续的  (B) 部分地址必须是连续的
(C) 一定是不连续的 (D) 连续与否均可以
参考答案:D
4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()
(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s;
(C)s->next=p->next;p=s; (D)p->next=s;s->next=p;
参考答案:B
5.在一个单链表中,若删除p所指结点的后续结点,则执行()
(A)p->next=p->next->next; (B)p=p->next; p->next=p->next->next;
(C)p->next=p->next;      (D)p =p->next->next;
参考答案:A
6.下列有关线性表的叙述中,正确的是()
(A)线性表中的元素之间隔是线性关系
(B)线性表中至少有一个元素
(C)线性表中任何一个元素有且仅有一个直接前趋
(D)线性表中任何一个元素有且仅有一个直接后继
参考答案:A
7.线性表是具有n个()的有限序列(n≠0)
(A)表元素(B)字符(C)数据元素(D)数据项
参考答案:C
二、判断题
1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。()
2.如果没有提供指针类型的语言,就无法构造链式结构。()
3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。()
4.语句p=p->next完成了指针赋值并使p指针得到了p指针所指后继结点的数据域值。()
5.要想删除p指针的后继结点,我们应该执行q=p->next ; p->next=q->next;free(q)。()
参考答案:1、×2、√3、×4、×5、√
三、填空题
1.已知P为单链表中的非首尾结点,在P结点后插入S结点的语句为:
_______________________ 。
s->next=p->next;  p->next=s;
2.顺序表中逻辑上相邻的元素物理位置( )相邻,单链表中逻辑上相邻的元素物理位置_________相邻。
一定;不一定
3.线性表L=(a1,a2,...,an)采用顺序存储,假定在不同的n+1个位置上插入的概率相同,则插入一个新元素平均需要移动的元素个数是________________________
n/2
4.在非空双向循环链表中,在结点q的前面插入结点p的过程如下:
p->prior=q->prior;
q->prior->next=p;
p->next=q;
______________________;
q->prior=p;
5.已知L是无表头结点的单链表,是从下列提供的答案中选择合适的语句序列,分别实现:
(1)表尾插入s结点的语句序列是_______________________________
(2) 表尾插入 s结点的语句序列是_______________________________
1)p->next=s;
2)p=L;
3)L=s;
4)p->next=s->next;
5)s->next=p->next;
6)s->next=L;
7)s->next=null;
8)while(p->next!= Q)  p=p-next;
9)while(p->next!=null) p=p->next;
(1)  6)  3)
(2)  2)  9)1) 7)
四、算法设计题
1.试编写一个求已知单链表的数据域的平均值的函数(数据域数据类型为整型)。
解答:#include "stdio.h"
#include "malloc.h"
typedef struct node
{int data;
struct node *link;
}NODE;
int aver(NODE *head)
{int i=0,sum=0,ave; NODE *p;
p=head;
while(p!=NULL)
{p=p->link;++i;
sum=sum+p->data;}
ave=sum/i;
return (ave);}
2.已知带有头结点的循环链表中头指针为head,试写出删除并释放数据域值为x的所有结点的c函数。
解答:#include "stdio.h"
#include "malloc.h"
typedef struct node
{
int data; /* 假设数据域为整型 */
struct node *link;
}NODE;
void del_link(NODE *head,int x) /* 删除数据域为x的结点*/
{
NODE *p,*q,*s;
p=head;
q=head->link;
while(q!=head)
{  if(q->data==x)
{p->link=q->link;
s=q;
q=q->link;
free(s); }
else
{
p=q;
q=q->link;
}
}
}
3.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现出库(销售)m台价格为h的电视机,试编写算法修改原链表。
sizeof是什么解答:
void del(NODE *head,float price,int num)
{
NODE *p,*q,*s;
p=head;q=head->next;
while(q->price<price&&q!=head)
{
p=q;
q=q->next;
}
if(q->price==price)
q->num=q->num-num;
else
printf("无此产品");
if(q->num==0)
{
p->next=q->next;
free(q);
}
}
4.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现新到m台价格为h的电视机,试编写算法修改原链表。
#include "stdio.h"
#include "malloc.h"
typedef struct node
{
float price;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。