这节以下面的脑图展开讲解。
顺序存储:顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。
链式存储:链式存储结构,又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)
顺序表
定义
直接去看 百度百科一分钟小视频
增删改查
- 插入元素
(1)在最前面插入元素 E,将 D 移到 下标为 4 的位置,再将 C 移到下标为 3 的位置,再将 B 移到下标为 2 的位置,再将 A 移到下标为 1 的位置,最后将E 放到下标为 0 的位置 。
(2)在 B,C 之中插入元素 E ,将 D 移到 下标为 4 的位置,再将 C 移到下标为 3 的位置,再将E 放到下标为 2 的位置 。
(3)在最后面插入元素 E,在 D 之后插入 E,直接将E 放到下标为 4 的位置 。 - 删除元素
(1)删除最前面的元素 A,然后将 B 移到下标为 0 的位置,将 C 移到下标为 1 的位置,将 D 移到下标为 2 的位置
(2)删除中间元素,删除 B ,然后将 C 移到下标为 1 的位置,将 D 移到下标为 2 的位置
(3)删除最后面的元素 D,直接删除 - 修改元素
将 B 改为 E ,直接改 - 查询元素
找 C ,那就从下标为 0 的位置开始找,一个一个比对
优点
- 结构简单
- 可以直接定位到表中任一元素,因为有下标。并可随机存储元素
- 连续存取速度快
缺点
- 存储空间难于分配,大了浪费,小了不够。
- 插入,删除 元素操作不方便,需要移动大量数据元素,效率低
练习题
1.在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤n+1)位置插入一个新元素时,需要从后向前依次后移()个元素。(代入法)
A.n-i B.n-i+1 C.n-i-1 D.i
2.在一个顺序表的表尾插入一个元素的时间复杂度的量级为( )。
A.O(n) B.O(1) C.O(n*n) D.O(lbn)
3.一个向量(即一批地址连续的存储单元)第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( ) 。
A.110 B.108 C.100 D.120
单链表
定义
直接去看 百度百科一分钟小视频,不懂指针的可以先去看 指针— 快捷方式 + 买芬达
增删改查
-
插入元素
(1)头插法,将 a 4 插在 a1 之前:q -> next = p -> next ,p -> next = q
(2)尾插法,将 a 5 插在 a3 之后:q -> next =p -> next,p -> next = q
(3)中间插入同理,先关注插入元素后面的结点,再关注插入元素前面的结点。 -
删除元素
删除a1:p -> next =p -> next -> next
-
修改元素
从头节点开始一个一个找,找到直接改 -
查询元素
从头节点开始一个一个找
优点
- 存储空间动态分配,按需使用
- 插入 、删除 结点操作时通常只要修改指针,不必移动数据元素
缺点
- 每一个结点都附加一个指针域
- 非随机存储结构,查找定位操作需从头指针出发顺着链表扫描
练习题
1.非空的循环单链表head的尾结点(由p所指向)满足( ) 。
A.p->next == NULL B.p == NULL
C.p->next == head D.p == head
2.在有n个节点的单链表中,删除指定节点的前趋的时间复杂度是( ) 。
A.O(1) B.O(n)
C.O(n2) D.O(n3)
3.在非空线性链表中由p所指的链节点后面插入一个由q所指的链节点的过程是依次执行动作()。
A.q->next=p; p->next=q; B.q->next=p->next; p->next=q
C.q->next=p->next; p=q; D.p->next=g;q->next=p;
双链表
定义
直接去看 百度百科一分钟小视频
增删改查
-
插入元素
a4 插入到 a1 和 a2 之间:(1) q -> next = p -> next,q -> prior = p
(2) p -> next -> prior = q (3) p -> next = q
-
删除元素
将 a2 删除 :p -> prior ->next = p -> next,p -> next -> prior = p ->prior
-
修改元素
从头节点开始一个一个找,找到直接改 -
查询元素
从头节点开始一个一个找
练习题
1.在双向循环链表中,在指针p指向的结点前插入一个由指针q指向的新结点,其修改指针的操作是()[注:双向链表的结点结构为(llink, data, rlink)]
A.p->llink=q; q->rlink=p;p->llink-link=q;q->llink=q;
B.p->llink=q;p->llink-rlink=q;q->rlink=p;q->llink=p-llink;
C.q->rlink=p;q->llink=p->llink;p->llink->rlink=q;p->llink=q;
D.q->llink=p->llink;q->rlink=p;p->llink=q; p->llink->rlink=q;
2在双向链表存储结构中,删除p所指的结点时须修改指针( ) 。
A.p->prior->next=p->next;p->next->prior=p->prior;
B.p->prior=p->prior->prior;p->prior- >next=p;
C.p->next->prior=p;p->next=p->next->next
D.p->next=p->prior->prior;p->prior=p->next->next;
静态链表
定义
练习题
1.线性表的静态存储结构与顺序存储结构相比,优点是( ) 。
A.所有的操作算法实现简单 B.便于随机存取
C.便于插入和删除 D.便于利用零散的存储器空间
⒉.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是()。
A.单链表 B.静态链表 C.线性链表吗 D.顺序存储结构