第二章 线性表(答案)

2020-04-17 06:00

第二章 线性表 一、选择题

1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )

(A)110 (B)108(C)100 (D)120

2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动( )个元素。

(A)64(B)63 (C)63.5 (D)7

3.线性表采用链式存储结构时,其地址( )。 (A) 必须是连续的 (B) 部分地址必须是连续的 (C) 一定是不连续的 (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;

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; 6.下列有关线性表的叙述中,正确的是( ) (A)线性表中的元素之间隔是线性关系 (B)线性表中至少有一个元素

(C)线性表中任何一个元素有且仅有一个直接前趋 (D)线性表中任何一个元素有且仅有一个直接后继 7.线性表是具有n个( )的有限序列(n≠0)

(A)表元素 (B)字符 (C)数据元素 (D)数据项 二、判断题

1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。(F ) 2.如果没有提供指针类型的语言,就无法构造链式结构。(T )

3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余

的结点只有一个前驱和后继。(T )

4.语句p=p->next完成了指针赋值并使p指针得到了p指针所指后继结点的数据域值。(F )

5.要想删除p指针的后继结点,我们应该执行q=p->next ; p->next=q->next; free(q)。(T ) 三、填空题

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结点的语句序列是________6) 3)

(2) 表尾插入 s结点的语句序列是_______ 2) 9)1) 7)_____

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.试编写一个求已知单链表的数据域的平均值的函数(数据域数据类型为整型)。 1、

int aver(LinkList L) {p=L; while(p)

{p=p->next; i++; sum=sum+p->data;} aver=sum/i; return aver;}

2.已知带有头结点的循环链表中头指针为head,试写出删除并释放数据域值为x的所有结点的函数。 2、

void del(LinkList L,int x) /* 删除数据域为x的结点*/ { p=L; q=L->next; while(q!=L) {if(q->data==x) {p->next=q->next; s=q; q=q->next;

free(s);} else { p=q; q=q->next; } } }

3.线性表中的元素值按递增有序排列,针对循环链表存储方式,编写函数删除线性表中值介于a与b(a≤b)之间的元素。 void del(LinkList L,elemtype a,elemtype b) {

p= L;q=p->next; /* 假设循环链表带有头结点 */ while(q!=L && q->datanext; }

while(q!=L && q->datanext; free(r); } if(p!=q) p->next=q; }

4. 已知两个链表A和B,其元素值非递减排列。写出将A和B合并成一个非

递减有序的链表C的算法。

void MergeList_L(LinkList La,LinkList Lb,LinkList &Lc) { //已知单链表La和Lb的元素按值非递减排列 pa=la->next;pb=lb->next;

Lc=La; pc=Lc; //用La的头结点作为Lc的头结点,

pc指向Lc中最后一个结点 while(pa&&pb){

if(pa->data <= pb->data) {

pc->next=pa; pc=pa;pa=pa->next; } else{

pc->next=pb; pc=pb;pb=pb->next; } if (pa) pc->next=pa; else pc->next=pb; free(Lb); }

5.试编写算法,删除双向循环链表中第k个结点。 void del(DuLinkList L,int k) { p=L;

for(i=0;inext;

if(p==NULL||i>k) return 1; p->prior->next=p->next; p->next->prior=p->proir; free(p); return 0; }


第二章 线性表(答案).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:日照钢铁淘汰落后产能 倒逼生产方式转型升级

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: