线性表·数据结构的江湖修行手札2【数据结构学习笔记】

【概念篇】

线性表概念详解

  • 专业定义:线性表是n个数据元素的有限序列,元素之间存在一对一的线性关系。
  • 江湖注解:就像武林大会排队领盒饭,有人按站位直接领(顺序表),有人凭暗号接力领(链表)。

江湖注解

  • 顺序存储:内力深厚者,如少林金刚拳,元素在内存中连续排列,找谁都快(随机访问O(1))
  • 链式存储:轻功飘逸者,如武当梯云纵,元素分散存储,但通过指针串联(插入删除O(1))

【分类篇】线性表家族

1.顺序表

  • 1.1 数组

  • 专业定义:内存连续存储的线性表,通过下标随机访问。
  • 江湖注解:如少林棍阵,弟子们站成一排,方丈喊“第三排左数第二个!”(下标访问),弟子应声而出。
类型C++JavaTypeScriptPython江湖注解
数组

一维数组:int arr[5] = {1,2,3,4,5};


二维数组:int matrix[2][3] = {{1,2,3}, {4,5,6}};

int[] arr = {1,2,3,4,5};
 

// 二维数组 int[][] matrix = new int[2][3];

let arr: number[] = [1,2,3];


let arr2: Array<string> = ["a", "b"]; // 泛型语法


// 元组(固定长度和类型) let tuple: [number, string] = [1, "text"];

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++JavaTypeScriptPython江湖注解
动态数组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++JavaTypeScriptPython江湖注解
矩阵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++JavaTypeScriptPython江湖注解
单链表std::forward_list<int> list = {1,2,3};自定义SingleNode类,手动链接interface INode { data: any; next?: INode; }class Node: next = None唐门链子镖:细线只连下一个,找第三个得从镖头摸过去

2.2 双链表

  • 专业定义:节点含前后指针的链表,如Java的LinkedList
  • 江湖注解:如乾坤大挪移,既能向前冲也能往后撤(双向遍历)。

类型C++JavaTypeScriptPython江湖注解
双链表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乾坤大挪移:既能向前冲也能往后撤,迷宫里能按原路返回

才疏学浅,感谢阅读,不足之处欢迎指导~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文艺晓萱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值