链表指针
#include<bits/stdc++.h>
using namespace std;
struct node
{
string name;
struct node *next;
};
int main()
{
node *a,*b,*c;
a = new node;
a->name = "明明";
a->next = NULL;//nullptr;
b = new node;
b->name = "航航";
b->next = NULL;
a->next = b;
b = new node;
b->name = "奕奕";
b->next = NULL;
a->next->next = b;
cout << a->name <<" " << a->next->name << " " << a->next->next->name;
return 0;
}
单向链表(数据域为data,指针域为next)(起始位置⼀定在头结点)(头指针 =尾指针时,链表为空)
题目
1.在单向链表中(链表⻓度>=4),以下哪种操作能使节点p后⾯插⼊新节点s ? D
A.p->next = s, s->next = p->next
B.p->next = s, s->next = p->next->next5
C.s->next = p, p->next = s->next
D.s->next = p->next, p->next = s
2.在单向链表中(链表⻓度>=4),以下哪种操作能删除节点p后⾯的⼀个节点?
A.p->next = p;free(p->next);
B.node *q = p->next,p->next = p->next->next; free(q);
C.node *q = p->next,p->next = q->next; free(p);
D.node *q = p,p->next = q->next->next; free(q);
循环链表
对于⼀个单向链表⽽⾔,最后⼀个节点的next指向头节点即可成为循环链表
双向链表
插⼊节点题目
1.在双向链表中(链表⻓度⾜够⻓),左指针为front,右指针为next。
以下哪种操作能使节点p后⾯插⼊新节点s?
A.p->next = s,s->next = p->next,s->front = p;s->next->front = s;
B.s->next = p->next,p->next = s, s->next->front = s;s->front = p;
C.s->next = p->next,p->next = s, s->front = p; p->next->front = s;
D.p->next = s,s->front = p,p->next->front = s, s->next = p->next;在
2.双向链表中(链表⻓度⾜够⻓),左指针为front,右指针为next。
以下哪种操作不能使节点p后⾯插⼊新节点s? D
A.s->front = p,s->next = p->next, p->next = s,s->next->front = s;
B.s->next = p->next,p->next = s, s->next->front = s,s->front = p;
C.s->next = p->next,p->next = s, s->front = p, p->next->next->front = s;
D.s->front = p,s->next = p->next, p->next = s,s->next->next->front = s;
删除节点题目
1.在双向链表中(链表⻓度⾜够⻓),左指针为front,右指针为next。
以下哪种操作 能 删除节点p的下⼀个节点? C
A.p->next = p->next->next,p->next->next->front = p,free(p);
B.node *q = p->next,p->next = p->next->next,p->next->next->front = p,free(q
);
C.node *q = p->next, p->next = p->next->next,p->next->front = p,free(q);
D.node *q = p,p = p->next,q->next = p->next,p->next->front = q,free(p),p =
q->front;
在双向链表中(链表⻓度⾜够⻓),左指针为front,右指针为next。
以下哪种操作 不能 删除节点p的下⼀个节点? B
A.node *q = p->next,p->next = q->next,q->next->front = p; free(q);
B.node *q = p->next, p->next = p->next->next,p->next->next->front = p,free(
q);
C.node *q = p,p = p->next,q->next = p->next,p->next->front = q,free(p),p =
q;
D.node *q = p->next,node *s = q->next,p->next = s,s->front = p,free(q);
链表与顺序表的时间复杂度
顺序表 | 链表 | |
在内存中的存在形式 | 连续的 | 离散的 |
空间利⽤率 | ⾼(只有数据域) | 低(数据域,指针域) |
查询时间复杂度 | O(1) | O(n) |
插入时间复杂度 | O(n)(插⼊⼀个数,后⾯的数都 需要向后移) | O(1) (不需要移动位置,只需要 操作指针即可) |
删除时间复杂度 | O(n)(删除这个数后,后⾯的数都要补上来) | O(1) (不需要移动位置,只需要 操作指针即可) |
是否⽀持随机查询 | 是 | 否 |
分配空间 | 静态分布空间(在建⽴的时候就要规定⼤⼩) | 可动态分布空间 |
声明
如有抄袭请联系删除
本文章有pdf文件文件