C &引用;列表“;作为不合格的数据结构

C &引用;列表“;作为不合格的数据结构,c,list,data-structures,C,List,Data Structures,当有人说“列表”并提供基本界面时,没有任何内部细节,例如: bool init ( List *plist) bool free ( List *plist) size_t size (const List *plist) bool insert( List *plist, const Item *pitem) bool delete( List *plist, int idx); 通常的实现是什么?也就是说,它通常是指“单链表”、

当有人说“列表”并提供基本界面时,没有任何内部细节,例如:

bool   init  (      List *plist)
bool   free  (      List *plist)
size_t size  (const List *plist)
bool   insert(      List *plist, const Item *pitem)
bool   delete(      List *plist, int idx);

通常的实现是什么?也就是说,它通常是指“单链表”、“双链表”、“动态数组”还是上述任何一种?基本上,列表是一个通用术语,可以表示数据结构的许多变体,或者它通常建议特定的实现,除非另有规定。

抽象数据类型(ADT)的重点是关注如何使用数据类型,而不是如何实现它。ADT的接口应反映在预期用例中高效所需的操作

话虽如此,我希望这个特定ADT的实现是一个动态数组,可能有一个哈希索引。但这与数据类型的名称无关

List
没有说太多,它所说的内容(在我看来,元素是按特定顺序排列的)没有反映在界面中。事实上,我根本不确定该接口的意义是什么。我知道你是怎么把东西放进收藏的。但是你如何找回它们呢


无论如何,容器名称没有最终的权威。所以你可以像汉普蒂·达姆蒂一样自由地用词来表达你想表达的意思。我提到的工作是由数学家写的,这不是巧合。

抽象数据类型(ADT)的重点是关注如何使用数据类型,而不是如何实现它。ADT的接口应反映在预期用例中高效所需的操作

话虽如此,我希望这个特定ADT的实现是一个动态数组,可能有一个哈希索引。但这与数据类型的名称无关

List
没有说太多,它所说的内容(在我看来,元素是按特定顺序排列的)没有反映在界面中。事实上,我根本不确定该接口的意义是什么。我知道你是怎么把东西放进收藏的。但是你如何找回它们呢


无论如何,容器名称没有最终的权威。所以你可以像汉普蒂·达姆蒂一样自由地用词来表达你想表达的意思。我提到的工作是由一位数学家写的,这不是巧合。

GLib
中,他们称他们的双链表
GList
和单链表
GSList
。数组被称为
GArray
等。请查看它们的名称。我认为最好的方法是只关注提供的接口和提供的文档,就像其他语言一样。您的界面很可能是一个setin
GLib
,他们称其为双链接列表
GList
和单链接列表
GSList
。数组被称为
GArray
等。请查看它们的名称。我认为最好的方法是只关注提供的接口和提供的文档,就像其他语言一样。您的界面很可能是一个集合