1.单向链表中的每个结点都需要动态分配内存空间。✔
2.用链表代替数组进行数据操作时,查询更加方便。✘
数组进行数据查询会更方便
3.链表是动态存储分配的数据结构。根据需要动态地开辟内存空间,可以比较自由方便地插入新元素(结点),支持随机访问,故使用链表可以节省内存,操作效率高。✘
效率不高,插入并不自由,也不节省内存
4.在一个单链表head中,若要在指针p所指结点后插入一个q指针所指结点,则执行(D)。
A.p->next=q->next; q->next=p;
B.q->next=p->next; p=q;
C.p->next=q->next; p->next=q;
D.q->next=p->next; p->next=q;
先对q进行操作,害怕p与q之间的数据断开
5.在一个单链表head中,若要删除指针p所指结点的后继结点,则执行(D)。
A.p=p->next;free(p);
B.p->next=p->next->next; free(p);
C.q= p->next q->next=p->next; free(q);
D.q=p->next; p->next=q->next; free(q);
- 将指针p的下一个结点的地址赋给指针q,即q=p->next;
- 将指针p的下一个结点的下一个结点的地址赋给指针p的下一个结点,即p->next=q->next;
- 释放结点q,即free(q)。
6. 单链表的访问规则是( B)。
A.随机访问
B.从头指针开始,顺序访问
C.从尾指针开始,逆序访问
D.可以顺序访问,也可以逆序访问
7.带头结点的单链表的结点结构Node包含数据域data、指针域next,当前指针为p,则使p指向下一个结点的语句是( C)。
A.p->next=p->next->next;
B.p->next=p;
C.p=p->next;
D.p=p.next
8.带头结点的单链表的结点结构Node包含数据域data、指针域next,头指针为head,要把p所指结点链接到head所指结点之后的语句是( B)。
A.head->next=p; p->next=head->next;
B.p->next=head->next; head->next=p;
C.head->next=p;
D.p->next=head->next;
head之后还有个节点
9.带头结点单链表:head->next==NULL;
不带头结点单链表:head==NULL;
10.带头结点的单链表的结点结构Node包含数据域data、指针域next,已知p、q、r分别指向链表中连续的三个结点,下面删去q所指结点的语句错误的是(C )。
A.p->next=q->next;
B.p->next=r;
C.p->next=r->next;
D.p->next=p->next->next;
删除结点时,需要让其前驱结点的指针指向其后继结点
删去的是q结点
11.以下程序段的功能是:输入一行字符,按输入的逆序建立一个链表。(B)
char c;
struct node{char info;struct node *link;
} *top, *p;top = NULL;
while ( (c = getchar() ) != '\n'){p = (struct node*) malloc(sizeof(struct node));p->info = c;_________ ;top = p;
}
A.top->link = p
B.p->link = top
C.top = p->link
D.p = top->link
逆序应该能理解
12.已知有如下C语言代码:
struct node {int val;struct node *next;
} p[3] = { 4, &p[2], 6, &p[0], 5, &p[1] };
其中值为6的表达式是:(D)
A.p[1].next->val
B.(&p[0])->next->val
C.p[2].val
D.p[2].next->val
看p[i]->next指的是哪个的地址
13.关于单向链表说法不正确的是:(D)
A.与数据相比,单向链表适合反复进行删除、插入操作
B.存储空间可以动态的获取和释放
C.结点的存储空间分两部分,一部分用于存储结点的数据,另一部分用于存储其他结点的指针
D.单向链表在内存中是连续存储的
内存不是连续储存的
14.链表不具有的特点是(A)。
A.可随机访问任一元素
B.插入、删除不需要移动元素
C.不必事先估计存储空间
D.所需空间与线性表长度成正比
不可随机访问任一元素