链表——基础知识

链表指针

#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文件文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值