【概念篇】
线性表概念详解
- 专业定义:线性表是n个数据元素的有限序列,元素之间存在一对一的线性关系。
- 江湖注解:就像武林大会排队领盒饭,有人按站位直接领(顺序表),有人凭暗号接力领(链表)。
江湖注解:
- 顺序存储:内力深厚者,如少林金刚拳,元素在内存中连续排列,找谁都快(随机访问O(1))
- 链式存储:轻功飘逸者,如武当梯云纵,元素分散存储,但通过指针串联(插入删除O(1))
【分类篇】线性表家族
1.顺序表
-
1.1 数组
- 专业定义:内存连续存储的线性表,通过下标随机访问。
- 江湖注解:如少林棍阵,弟子们站成一排,方丈喊“第三排左数第二个!”(下标访问),弟子应声而出。
| 类型 | C++ | Java | TypeScript | Python | 江湖注解 |
|---|---|---|---|---|---|
| 数组 |
|
// 二维数组 int[][] matrix = new int[2][3]; |
| arr = [1,2,3]# 列表(替代传统数组) list1 = [1, 2, 3] # 可混合类型 list2 = ["a", True, 3.14] # 动态类型 # 元组(不可变数组) tuple1 = (1, "text", False) | 少林棍阵:内存连续,方丈喊“第三排左数第二个!”(直接下标访问) |
| 关键词:[](方括号)、固定长度、连续内存、手动初始化 | 关键词:new、[]、固定长度、类型严格 | 关键词:Array<T>、类型注解、元组(tuple) | 关键词:list、tuple、动态类型、切片 |
-
1.2动态数组
- 专业定义:自动扩容的数组,如C++的
vector、Java的ArrayList。 - 江湖注解:如丐帮打狗阵,弟子越聚越多,阵法自动扩大(扩容)。
| 类型 | C++ | Java | TypeScript | Python | 江湖注解 |
|---|---|---|---|---|---|
| 动态数组 | std::vector<int> vec = {1,2,3}; | ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3)); | let list: number[] = [1,2,3]; list.push(4); | list = [1,2,3]; list.append(4) | 丐帮打狗阵:自动扩容,新弟子加入自动挤位置 |
-
1.3稀疏矩阵
- 专业定义:仅存储非零元素的矩阵,节省内存。
- 江湖注解:如武当八卦阵,空地上不站人,只记关键位置(非零元素)。
| 类型 | C++ | Java | TypeScript | Python | 江湖注解 |
|---|---|---|---|---|---|
| 矩阵 | std::unordered_map<int, int> sparse = {{0,1}, {2,3}}; | HashMap<Integer, Integer> sparse = new HashMap<>(); sparse.put(0,1); | let sparse = new Map<number, number>().set(0,1); | sparse = {0:1, 2:3} | 武当八卦阵:只记关键位置,空地直接忽略 |
2 链表
2.1 单链表
- 专业定义:节点仅含后继指针的链表,如C++的
forward_list。 - 江湖注解:如唐门链子镖,镖头带细线,甩出后只能顺线回收(单向遍历)。
- 双向链表:乾坤大挪移,前后通吃(适合需要回退的场景,如任务追踪)
| 类型 | C++ | Java | TypeScript | Python | 江湖注解 |
|---|---|---|---|---|---|
| 单链表 | std::forward_list<int> list = {1,2,3}; | 自定义SingleNode类,手动链接 | interface INode { data: any; next?: INode; } | class Node: next = None | 唐门链子镖:细线只连下一个,找第三个得从镖头摸过去 |
2.2 双链表
- 专业定义:节点含前后指针的链表,如Java的
LinkedList。 - 江湖注解:如乾坤大挪移,既能向前冲也能往后撤(双向遍历)。
| 类型 | C++ | Java | TypeScript | Python | 江湖注解 |
|---|---|---|---|---|---|
| 双链表 | std::list<int> dlist = {1,2,3}; | LinkedList<Integer> dlist = new LinkedList<>(Arrays.asList(1,2,3)); | class DoubleNode { prev: DoubleNode; next: DoubleNode; } | class DoubleNode: prev=None, next=None | 乾坤大挪移:既能向前冲也能往后撤,迷宫里能按原路返回 |
才疏学浅,感谢阅读,不足之处欢迎指导~

698

被折叠的 条评论
为什么被折叠?



