C程序设计(链表)习题与答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
#include
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
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
#include
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所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的