第十章测试1.
下面关于void * malloc (unsigned int size)函数描述错误的( )。
A:函数的返回值为指向该区域起始地址的指针 B:若分配不成功则返回NULL C:malloc函数申请的空间若不释放,也有可能被其他程序申请 D:malloc()函数用来动态分配内存,所分配的空间长度为size
答案:C
2.
有如下定义:
struct node
{ int data;
struct node *next;
}a,b,c;
下列哪个答案可以将变量a,b,c在内存中的位置连接起来( )。
A:a=b=c; B:a.next=&b; b.next=&c; C:a.data=&b; b.data=&c; D:a.next=b.next=c.next; 3.
有以下结构体说明和变量的定义,且指针p指向结点a,指针q指向结点b。则把结点b连接到结点a之后的语句是( ) 。
struct node {
int data;
struct node *next;
}
struct node a,b,*p=&a,*q=&b;
A:p->next=b; B:(*p)->next=q; C:a.next=q; D:p.next=&b; 4.
下列关于线性链表的叙述中,正确的是( )
A:其他三种说法都不对 B:各数据结点的存储空间必须连续 C:各数据结点的存储顺序与逻辑顺序必须要一致 D:进行插入和删除时,不需要移动链表中的元素 5.
有以下结构体说明和变量定义:
struct node{
int data;
struct *next;}*p1,*q,*p2;
下面的链表中,在p1和p2之间插入一个元素q,正确的操作是( )
A:p2->next=q; q->next=NULL; B:p1->next=q; q->next=p2; C:p1->next=p2;p2->next=q; D:p1->next=q; q->next=NULL; 6.
有以下结构体说明和变量定义:
struct node{
int data;
struct *next;}*p1,*q,*p2;
下面的链表中,在p1和p2之间删除一个元素q,正确的操作是( )
A:p1->next=q; q->next=p2; B:p1->next=q->next; C:p1->next=p2,p2->next=q; D:p1->netx=p2->next; 7.
现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指定一个链表中连续的3个结点。则下列语句表示删除q节点数据的是( )。
struct node
{
double data;
struct node*next;
}*p, *q, *r;
A:p=r; B:q->next=p; C:p->next= q->next ; D:q->next=r->next; 8.
在单链表指针为p的结点之后插入指针为s的结点,正确的操作是( )。
A: s->next=p->next;p->next=s; B:p->next=s;p->next=s->next; C:p->next=s;s->next=p->next; D:p->next=s->next;p->next=s; 9.
若已建立下面的链表结构,指针p、s分别指向图中所示节点,则不能将s所指的节点插入到链表末尾的语句组是( )。
A:p=p->next; s->next=p; p->next=s; B:p=p->next; s->next=p->next; p->next=s; C:s->next=NULL; p=p->next; p->next=s; D: p=(*p).next; (*s).next=(*p).next; (*p).next=s; 10.
有如下定义:则下列哪条语句可以将图中b结点删除( )。
struct node { int data;
struct node *next;
}a,b,c;
A:a.next=b.next; B:a.next =c.next; C:a.next=&b; b.next=&c; D:a=c;