- C++
备战CSP-J初赛21天打卡计划。DAY5-数组和链表
- 2024-9-3 22:14:16 @
链表
链表的每个元素除了存放数据还存储了下一个元素的位置信息,从而使一系列随机存放的数据串在一起,其中的数据呈线性排列。它的特点是插入与删除数据十分方便,但寻找与读取数据的表现欠佳。
链表的操作
插入元素:若要在元素Blue后面插入元素Green,只需要让Green指向Blue的后一个元素(Yellow),再让Blue指向Green即可;
删除元素:若要删除元素Yellow,只需让Yellow的前一个元素(Green)直接指向Yellow的后一个元素(Red)即可;
查询元素:若要在链表中查询数据为x的元素,需要从表头开始遍历查找(操作次数O(n)
)。
数组模拟链表
//创建链表
for (int i = 0; i < n; i++) {
cin >> num[i];
nxt[i] = i + 1; //每一位都指向下一位
}
nxt[n - 1] = -1; //让最后一位指向并不存在的第-1位,代表数组结束
//找到数据为x的元素并删除
int now = 0;
while (nxt[now] != -1) { //只要当前位(now)不是最后一位
if (num[nxt[now]] == x) { //如果当前位(now)的下一位对应的数值是x
nxt[now] = nxt[nxt[now]]; //则将当前位(now)直接指向下一位的下一位
break; //找到并删除则结束遍历
}
now = nxt[now]; //让当前位(now)前往下一位
}
单选题
1、链表不具备的特点是( )。
A.可随机访问任何一个元素
B.插入、删除操作不需要移动元素
C.无需事先估计存储空间大小
D.所需存储空间与存储元素个数成正比
2、线性表若采用链表存储结构,要求内存中可用存储单元地址( )。
A. 必须连续
B. 部分地址必须连续
C. 一定不连续
D. 连续不连续均可
3、链表不具有的特点是()
A.插入删除不需要移动元素
B.不必事先估计存储空间
C.所需空间与线性表长度成正比
D.可随机访问任一元素
4、链表不具有的特点是( )。
A. 可随机访问任一元素
B. 不必事先估计存储空间
C. 插入删除不需要移动元素
D. 所需空间与线性表长度成正比
2 条评论
-
xinao015 LV 1 @ 2024-9-5 20:41:20
ABBA
-
2024-9-3 22:17:40@
单选题答案: 1:答案:A 链表只能从头结点开始按顺序访问,不能随机访问。
2:答案:D 最常见的操作方式:先开辟出一段连续空间(类似数组),如果不够用,再一点点开辟新空间,因此所用的内存很可能是连续与不连续混合的。 链表可以不连续,便于数据的插入和删除。 线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。 在实际应用中,线性表常以链表、栈、队列、字符串等形式使用。 数组与链表的区别: 0)链表相邻元素是逻辑上的连续,数组相邻元素是物理上的连续; 1)链表的长度可以改变,但数组的长度是固定的; 2)链表可以插入元素,数组不能插入元素; 3)链表可以删除元素,数组无法删除元素,数组只能将指定元素赋为null,但各种元素依然存在; 4)链表提供方法来搜索指定元素的位置,数组一般无该方法; 5)链表提供方法来清空所有元素,但数组一般无该方法 数组的存储空间要求连续的内存;链表不要求连续的内存,当然连续的内存也可以。选D。
3:解析:D。 A.插入、删除无需改变元素位置,只需改变存储的下一元素地址信息。 B.链表无需事先预留足够大的储存空间,可以动态分配内存。 C.链表为线性结构,空间与长度成正比。 D.链表只能从头开始依次访问每个元素,无法随机访问任意元素。
4:A
- 1