C程序设计(链表)习题与答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单选题
1、链表不具有的特点是()。

A.不必事先估计存储空间
B.插入、删除不需要移动元素
C.可随机访问任一元素
D.所需空间与线性表长度成正比
正确答案:C
2、链接存储的存储结构所占存储空间()。

A.分两部分,一部分存放结点值,另一部分存放结点所占单元数
B.只有一部分,存放结点值
C.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
D.只有一部分,存储表示结点间关系的指针
正确答案:C
3、链表是一种采用()存储结构存储的线性表。

A.网状
B.星式
C.链式
D.顺序
正确答案:C
4、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是()。

struct node {
char data;
struct node *next;
} a,b,*p=&a,*q=&b;
A.(*p).next=q;
B.p.next=&b;
C.a.next=q;
D.p->next=&b;
正确答案:B
5、下面程序执行后的输出结果是()。

#include <stdio.h>
#include <stdlib.h>
struct NODE {
int num; struct NODE *next;
};
int main()
{ struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10; q->num=20; r->num=30;
p->next=q;q->next=r;
printf("%d",p->num+q->next->num);
return 0;
}
A.30
B.40
C.10
D.20
正确答案:B
6、下面程序执行后的输出结果是()。

#include <stdio.h>
struct NODE { i nt num; struct NODE *next; } ;
int main()
{ struct NODE s[3]={{1, '\0'},{2, '\0'},{3, '\0'}},*p,*q,*r;
int sum=0;
s[0].next=s+1; s[1].next=s+2; s[2].next=s;
p=s; q=p->next; r=q->next;
sum+=q->next->num; sum+=r->next->next->num;
printf("%d", sum);
return 0;
}
A.3
B.6
C.5
D.4
正确答案:C
7、在单向链表中,存储每个结点需有两个域,一个是数据域,另一个是指针域,它指向该结点的()。

A.开始结点
B.终端结点
C.直接后继
D.直接前趋
正确答案:C
8、对于一个头指针为head的带头结点的单向链表,判定该表为空表的条件是()。

A.head!=NULL
B.head→next==NULL
C.head→next==head
D.head==NULL
正确答案:B
9、以下程序的功能是建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请选择合适的选项填入()。

#include <stdio.h>
#include <stdlib.h>
struct node {
char data; struct node *next;
};
struct node* CreatList(char *s)
{ struct node *h,*p,*q;
h=(struct node *)malloc(sizeof(struct node));
p=q=h;
while(*s!='\0') {
p=(struct node *) malloc(sizeof(struct node));
p->data=*s;
q->next=p;
q=______ ;
s++;
}
p->next=NULL;
return h;
}
int main()
{ char str[]="link list";
struct node *head;
head=CreatList(str);
return 0;
}
A.p
B.s
C.p->next
D.s->next
正确答案:A
10、有以下结构体说明和变量定义,指针p、q、r分别指向一个链表中的三个连续结点。

struct node {
int data;
struct node *next;
} *p, *q, *r;
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是()。

A.p->next=r; q->next=r->next; r->next=q;
B.q->next=r->next; r->next=q; p->next=r;
C.q->next=r->next; p->next=r; r->next=q;
D.r->next=q; q->next=r->next; p->next=r;
正确答案:D
11、有以下结构体说明和变量定义,如图所示:
struct node {
int data;
struct node *next;
} *p, *q, *r;
现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的
语句是()。

A.p->next=p->next->next;
B.p->next=r;
C.p->next=q->next;
D.p=q->next;
正确答案:D
12、有以下定义:
struct link {
int data;
struct link *next;
} a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构:
指针p指向变量a,q指向变量c。

则能够把c插入到a和b 之间并形成新的链表的语句组是()。

A.p.next=q; q.next=p.next;
B.p->next=&c; q->next=p->next;
C.(*p).next=q; (*q).next=&b;
D.a.next=c; c.next=b;
正确答案:C
13、有关双向链表的说法正确的是()。

A.双向链表的结点含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针
B.双向链表实现了对结点的随机访问,是一种随机存储结构。

C.在双向链表中插入或删除结点时,需要移动结点。

D.双向链表所需空间与单向链表相同。

正确答案:A
14、在双向链表存储结构中,删除p所指的结点时须修改指针()。

A.p->next=p->next->next;p->next->prior=p;
B.p->prior=p->next->next;p->next=p->prior->prior;
C.p->prior->next=p;p->prior=p->prior->prior;
D.p->next->prior=p->prior;p->prior->next=p->next;
正确答案:D
二、判断题
1、对链表进行插入和删除操作时,不必移动结点。

(√)
2、链表的每个结点中都恰好包含一个指针。

(×)
3、链表的物理存储结构具有同链表一样的顺序。

(×)
4、链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。

(×)
5、在单向链表中,要访问某个结点,只要知道该结点的指针即可;因此,单向链表是一种随机存储结构。

(×)
6、如果单向链表带有头结点,则插入操作永远不会改变头结点指针的值。

(√)
三、填空题
1、写出下面程序执行后的运行结果。

#include <stdio.h>
struct NODE {
int k;
struct NODE *link;
};
int main()
{ struct NODE m[5],*p=m,*q=m+4;
int i=0;
while(p!=q) {
p->k=++i; p++;
q->k=i++; q--;
}
q->k=i;
for(i=0;i<5;i++) printf("%d",m[i].k);
return 0;
}
正确答案:13431
2、写出下面程序执行后的运行结果。

#include <stdio.h>
#include <stdlib.h>
struct NODE {
int num;
struct NODE *next;
};
int main( )
{ struct NODE *p,*q,*r;
int sum=0;
p=(struct NODE *)malloc(sizeof(struct NODE));
q=(struct NODE *)malloc(sizeof(struct NODE));
r=(struct NODE *)malloc(sizeof(struct NODE));
p->num=1;q->num=2;r->num=3;
p->next=q;q->next=r;r->next=NULL;
sum+=q->next->num;sum+=p->num;
printf("%d",sum);
return 0;
}
正确答案:4。

相关文档
最新文档