当前位置: 首页 > news >正文

Go 数据结构入门:线性表、顺序表、链表

文章目录

  • Go 数据结构入门:线性表、顺序表、链表
  • 一、什么是线性表?(一句话记住)
  • 二、先看懂:内存长什么样(外层容器)
  • 三、顺序表:内存中「连续存放」
      • 🔥 内存布局图(外层容器 \+ 内层连续)
      • 特点
      • 优点
      • 缺点
      • Go 中的顺序表 = 切片 slice
  • 四、链表:内存中「不连续、散落存放」
      • 🔥 内存布局图(外层容器 \+ 内层散落)
      • 每个节点结构
      • 特点
      • 优点
      • 缺点
      • Go 实现简单链表
  • 五、最强对比:顺序表 vs 链表
      • 🔥 一眼看懂内存区别
  • 六、零基础总结(3 句话背会)

Go 数据结构入门:线性表、顺序表、链表

大家好~前面我们学习了 Go 基础、指针,今天正式进入数据结构
很多同学觉得数据结构抽象难懂,我这篇用「外层内存容器 + 内层格子布局」画图讲解,一眼看清顺序表连续、链表不连续,零基础一遍看懂!

全篇包含:
✅ 什么是线性表(超级通俗)
✅ 顺序表:内存连续存放(结构图)
✅ 链表:内存不连续、散落存放(结构图)
✅ 顺序表 vs 链表 最强对比
✅ Go 代码演示
✅ 面试必问总结


一、什么是线性表?(一句话记住)

线性表 = 排成一条直线的元素序列。

就像:排队、一串珠子、一列火车…

特点:

  • 有先后顺序

  • 有第一个、最后一个

  • 中间每个元素:前面叫前驱,后面叫后继

线性表只是逻辑结构,真正在内存里有两种实现:
1️⃣顺序表(连续放)
2️⃣链表(分开放,指针连)


二、先看懂:内存长什么样(外层容器)

我们把整个内存画成一个大矩形容器,里面是一个个带地址的小格子:
每个格子 = 1 字节,有唯一地址。

┌─────────────────────────────────────────────┐ │ 系统内存 │ ← 外层大容器 │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │0x01 │ │0x02 │ │0x03 │ │0x04 │ │0x05 │ │ │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │0x06 │ │0x07 │ │0x08 │ │0x09 │ │0x10 │ │ │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │ └─────────────────────────────────────────────┘

所有数据结构,本质就是:
怎么在这些格子里摆放数据。


三、顺序表:内存中「连续存放」

顺序表 =一整块连续内存,元素紧紧挨在一起。

🔥 内存布局图(外层容器 + 内层连续)

┌─────────────────────────────────────────────┐ │ 内存 │ │ │ │ ┌─────┬─────┬─────┬─────┬─────┐ │ │ │ 10 │ 20 │ 30 │ 40 │ 50 │ │ │ └─────┴─────┴─────┴─────┴─────┘ │ │ ↑ 完全连续、紧凑挨着 │ │ │ └─────────────────────────────────────────────┘

特点

  • 元素物理地址连续

  • 支持随机访问(下标直接取,O (1))

优点

✅ 查找快
✅ 内存紧凑,无额外开销

缺点

❌ 插入 / 删除慢:后面元素要整体移动
❌ 需要一大块连续内存,内存不足易分配失败

Go 中的顺序表 = 切片 slice

packagemainimport"fmt"funcmain(){// 切片本质就是顺序表(连续内存)arr:=[]int{10,20,30,40,50}// 随机访问 O(1)fmt.Println(arr[2])// 30}

四、链表:内存中「不连续、散落存放」

链表 =元素可以散落在内存任意位置,只用指针串起来
就像小朋友手拉手,不用站在一起。

🔥 内存布局图(外层容器 + 内层散落)

┌─────────────────────────────────────────────┐ │ 内存 │ │ │ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │ 10 │ │ 20 │ │ 30 │ │ │ │ Next├──────────→│ Next├────→│ Next├─→nil│ │ └──────┘ └──────┘ └──────┘ │ │ ↑ 不连续 ↑ 不连续 │ └─────────────────────────────────────────────┘

每个节点结构

┌─────────────────────┐ │ 数据域 │ ← 存值 │ 指针域 │ ← 存下一个节点地址 └─────────────────────┘

特点

  • 物理空间不连续

  • 逻辑连续(靠 Next 指针串联)

优点

✅ 插入 / 删除极快:只改指针
✅ 不需要连续内存,碎片利用率高
✅ 可随时无限扩容

缺点

❌ 查找慢:必须从头遍历
❌ 每个节点多存一个指针,额外开销

Go 实现简单链表

packagemainimport"fmt"// 定义链表节点typeNodestruct{ValintNext*Node}funcmain(){// 构建 10 → 20 → 30n1:=&Node{Val:10}n2:=&Node{Val:20}n3:=&Node{Val:30}n1.Next=n2 n2.Next=n3// 遍历链表cur:=n1forcur!=nil{fmt.Println(cur.Val)cur=cur.Next}}

五、最强对比:顺序表 vs 链表

🔥 一眼看懂内存区别

【顺序表:连续】 ┌─────────────────────────────────┐ │ 内存 │ │ ┌─────┬─────┬─────┬─────┐ │ │ │ 10 │ 20 │ 30 │ 40 │ │ │ └─────┴─────┴─────┴─────┘ │ └─────────────────────────────────┘ 【链表:不连续】 ┌─────────────────────────────────────────────┐ │ 内存 │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │ 10 │ │ 20 │ │ 30 │ │ │ └──┬──┘ └──┬──┘ └──┬──┘ │ │ └──────────────└──────────────┘ │ │ 指针连接,物理位置完全不连续 │ └─────────────────────────────────────────────┘
维度顺序表链表
内存布局连续不连续、散落
查找快 O (1)慢 O (n)
插入 / 删除慢(需要移动数据)快(只改指针)
内存占用小(无额外开销)大(每个节点存指针)
扩容需重新分配连续内存随时加节点
适用场景查询多、增删少增删多、频繁插入

六、零基础总结(3 句话背会)

  1. 线性表 = 排成一条直线的元素

  2. 顺序表 = 内存连续存放,查找快、增删慢

  3. 链表 = 指针连接,增删快、查找慢


👍点赞 + ⭐收藏 + 📌关注,更新第一时间不迷路!

(注:文档部分内容可能由 AI 生成)

http://www.jsqmd.com/news/740415/

相关文章:

  • AI Agents 开源 LLM 简报 (2026年5月2日)
  • 一次吃透LeetCode哈希表经典题:附完整思路与代码解析
  • 别再手动调网格了!Fluent自适应网格实战:从入门到精通,手把手教你用Cell Registers提升计算效率
  • 盒马鲜生礼品卡怎么用?闲置变现也有省心办法 - 京顺回收
  • 从汽车电子到通用嵌入式:MISRA-C 2012实战避坑指南(附代码审查清单)
  • 对比不同模型在相同任务下的 token 消耗与成本差异
  • Linux服务器运维:手把手教你用parted命令从U盘创建、格式化到挂载全流程
  • 酷安UWP桌面客户端:在Windows上高效管理你的数码生活
  • AI应用本地化部署利器:ai_launcher统一管理Ollama、Stable Diffusion等开源模型
  • 2026年3月东胜专业的特种空调直销厂家推荐,特种空调公司,大风量设计,覆盖面积广 - 品牌推荐师
  • 2026年太阳能路灯厂家技术参数排行榜,选购前必看 - 速递信息
  • 如何在5分钟内为Jellyfin安装智能中文字幕插件:终极解决方案
  • 2026年南宁GEO优化公司类型与选择标准百科
  • 2026北京抖音代运营服务商评测:靠谱选择的核心维度 - 奔跑123
  • 终极免费方案:5分钟实现专业级键鼠操作可视化
  • LibreTranslate终极指南:构建私有化机器翻译服务的7个关键步骤
  • 如何构建专业的Android电池监控小部件:3步实现实时电量显示与数据可视化
  • Wireshark导出数据包别再只会全选了!这5种精准导出技巧,网络排查效率翻倍
  • ISO14044合规指南:手把手教你用Simapro完成LCA灵敏度分析(含参数集对比)
  • 分期乐购物额度闲置怎么办?教你合规变现实操 - 米米收
  • 图解PTP/IEEE1588:从Sync、Follow_Up报文到BMC算法,一次搞懂时间同步核心流程
  • 2026年3月,SA213T91高压合金管总代理深入测评,良好抗振性,减少振动带来的损伤 - 品牌推荐师
  • 2026杭州男士假发定制怎么选?按六大维度实测,这家零踩坑! - 律界观察
  • 新硬件装老系统?手把手解决Ubuntu18.04下Realtek 2.5G网卡没网络的尴尬
  • STM32F407VET6 CAN通信实战:从CubeMX配置到收发调试(附完整代码)
  • BilibiliDown:5分钟掌握B站视频下载的终极免费方案
  • WindowResizer:突破限制,让每个Windows窗口都听从你的指挥![特殊字符]
  • 别再为表格数据发愁了!用TabLLM和GPT-3,几行提示词搞定分类任务(附代码)
  • 鸣潮工具箱WaveTools:为PC玩家量身打造的性能与数据管理解决方案
  • SQL调优全攻略:索引失效定位、EXPLAIN实战与性能跃迁指南