表
抽象数据类型
抽象数据类型(abstract data type,ADT)是带有一组操作的一些对象的集合,对于集合ADT,一般有add、remove、cotains。当然也可以只要两种操作union和find,这两种操作又在这个集合上定义了一种不同的ADT
表ADT
表A0,A1,A2,...,An-1,表大小为n,大小为0的特殊表为空表
除空表外的任何表,Ai后继Ai-1,Ai-1前驱Ai,A0无前驱,An-1无后继
表的简单数组实现
对表的所有操作都可以通过数组来实现,虽然数组是由固定容量创建的,但在需要的时候可以用双倍的容量创建一个新的数组
int[] data = new int[10]; int size = 0; void add(int a) { if (size > data.length - 1) { data = Arrays.copyOf(data, data.length * 2); } data[size++] = a; } int get(int index) { if (index > data.length - 1) { throw new IndexOutOfBoundsException("index:" + index + ",size:" + size); } return data[index]; }
数组表的插入和删除最坏情况O(N)
简单链表
为了避免插入和删除的线性开销,需要保证表可以不连续存储
链表由一系列节点组成,这些节点不必在内存中相连,每一个节点均含有表元素和到包含该元素后继元素的节点的链(link),称为next链,最后一个节点的next链引用为null
删除(remove)方法通过修改一个next链引用来实现
插入(insert)方法new一个新节点,执行两次引用的调整
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单