4. 线性表元素的实现¶
4.1. 线性表元素的实现¶
在设计任何 容器类 时, 都需要围绕数据元素做出许多设计上的抉择。
如果某个东西可能在线性表中出现多次,该怎么处理? 一种选择是使用对 元素 的引用。 另一种选择是存储各自的副本。 一般而言,元素越大、被复制的次数越多, 指向共享元素的指针就越可能是更好的方案。
4.1.1. 同质性¶
下一个要考虑的问题是: 是否要在线性表元素上强制 同质性 。 也就是说,是否应当限制线性表, 使所有存储的数据元素都属于同一对象类型? 还是应当允许存储不同的类型?
如果想强制同质性, 最死板的办法是直接把元素定义为某个固定类型。 但如果想让一个线性表存储整数、 另一个线性表存储字符串,这种办法就无能为力了。 灵活得多的办法是使用 Java 泛型或 C++ 模板。 这样,编译器会强制指定的线性表只存储单一数据类型, 同时又允许不同的线性表拥有不同的数据类型。 另一种办法是在线性表的头结点中存储一个适当类型的对象 (这个适当类型的对象也许会作为参数提供给线性表构造函数), 然后检查对该线性表的所有插入操作都使用相同的元素类型。 这种办法在 JavaScript 这类不使用强类型、 但允许程序检测对象类型的语言中很有用。
在某些应用中,设计者希望允许指定的线性表存储不同类型的元素。
在 Java 中,把元素声明为 Object 类型,
就能让编译器不再强制任何类型限制。
在 C++ 中,使用 void* 指针也能达到类似的效果。
4.1.2. 元素的删除¶
最后一个设计问题是: 当线性表本身被删除时,该如何处理其中的元素? 在不支持自动垃圾回收的 C++ 这类语言中, 这是一个必须认真对待的问题。

