双向链表是类还是实现技术?数据结构作业ADT实现方案咨询
关于List ADT与双向链表实现的最优设计
嗨,咱们先把核心概念理清楚,再聊你的设计方案:
首先,你手里的IList<E>接口,其实就是老师要求的List ADT——ADT(抽象数据类型)本质是定义了一组操作规范(比如添加、删除、查询元素),而接口正好是用来抽象这种规范的,它不关心底层怎么实现,只关心能做什么。
你的最优设计方案应该是:让DoublyLinkedList<E>直接实现IList<E>
完全不需要额外创建一个List<E>类来包装DoublyLinkedList,原因如下:
- 这最贴合老师的要求:用双向链表实现List ADT。
DoublyLinkedList作为具体实现类,直接把IList里定义的所有方法,用双向链表的逻辑(操作节点的prev和next指针)来实现就好,逻辑清晰且直接。 - 额外的包装类属于过度设计:除非你后续需要支持多种List实现(比如数组版的
ArrayList、链表版的DoublyLinkedList),想做一个统一的对外入口来切换实现,否则多一层委托只会增加不必要的复杂度,对于作业场景来说完全没必要。
再回答你开头的疑问:双向链表是类也是实现技术
双向链表本身是一种实现技术(用节点+前后指针来存储元素的方式),而我们需要把这种技术封装成一个类(也就是DoublyLinkedList<E>),让它实现ADT的接口,这样既符合面向对象的封装思想,也完成了ADT的落地实现。
内容的提问来源于stack exchange,提问作者degemenc
相关产品推荐
相关产品推荐

