c - 没有自引用结构的链表
问题描述
我正在学习数据结构,在做链表的时候,我在想除了 C 中的自引用结构之外,是否还有另一种类型的声明来实现链表。
这是我第一次需要在 C 中使用结构,每个人都只使用自引用结构来实现。我想知道是否有任何其他可能的方式来实现没有自引用结构的链表。
解决方案
我在想除了 C 中的自引用结构之外,是否还有另一种类型的声明来实现链表。
不,链表只能通过使用指向它们自己类型的显式或隐式指针来实现。
使用指针屏蔽这种自引用void*
是可能的,但它只会使代码复杂化,使自引用隐含并且使代码更难阅读。
数组:
当然,您可以使用无序数组并通过看起来像链表的内部索引方案将其“排序” - 但它仍然是一个数组,并且它不会具有与经典链表相同的行为。
例如,基于数组的链表可能会绑定到预先选择的元素数量(在编译期间选择),当列表未满时会导致更高的内存消耗,并且无法在某个点之后添加元素。
另一方面,如果您的基于数组的链表是动态的,则项目复制期间realloc
可能会引入性能成本(例如,使 O(1) 操作以 O(n) 执行)。
另一件需要考虑的事情是,基于动态数组的链表将导致每次数组更改其地址时指向数据的指针都无效(realloc
)。
推荐阅读
- mysql - 从 pandas 数据帧到 mysql db 毫秒的日期时间
- angular - AspNetBoilerplate:前端的服务器端枚举使用(角度)?
- java - 尝试检测自创的死锁
- c# - .NET Core for Linux with dockers - 创建 docker 镜像
- electron - 在 electronjs 应用启动时通过 sequelize 初始化数据库
- background - 当应用程序进入前台时,OpenTok 发布者的视图变黑
- excel - Excel VBA 2 输入文件,每个文件都以不同的格式打开和复制,而不是相同的格式
- javascript - 与聚合物 lit-element 0.6.2 结合不起作用
- amazon-web-services - 具有步进扩展的 AWS 计划自动扩展
- javascript - “AbstractControl”类型上不存在属性“控件”。角 7