符号表Vs设置

时间:2017-01-22 09:52:47

标签: c dictionary data-structures set symbol-table

来自sedgewick course,我了解到了,

  

符号表

     

符号表是key - value对抽象

     

其中,给定key,搜索相应的value

     

value不为空

     如果get()不存在,

key将返回null

     

put()用新值覆盖旧值。

在引入符号表抽象之后,不确定,为什么术语 Dictionary 抽象& 地图抽象介绍?堆栈溢出会维护这些标记。

使用List实现的符号表表示,

typedef struct{
  void **array;
  int size;
}List;

typedef struct{
  void *key;
  void *value; // cannot be null
}Pair;

typedef struct ST{

  List *keyValuePairList;
}ST;

wiki,我了解到了,

  

Set 是一种抽象数据类型,可以存储某些值,没有任何特定顺序,也没有重复值。它是有限集的数学概念的计算机实现。

从wiki定义的设置,我得出结论,

  

设置是一个包含不同项目的抽象,

     

其中,每个项目都有key

     

维护相应的value并未违反设置属性

     

value可以为null,

     如果get()不存在,

key将返回null,

     如果put()不为空,

value会使用新值覆盖旧值。

从操作&数据方面,设置符号表看起来类似。很难理解什么时候使用什么?

使用List实施设置表示,

typedef struct{
  void **array;
  int size;
}List;

typedef struct{
  void *key;
  void *value; // can be null
}Pair;

typedef struct{

  List *keyValuePairList;
}Set;

问题:

put()操作区分设置符号表?我仍然看到这两个是相同的。

2 个答案:

答案 0 :(得分:2)

符号表通常是编译器和链接器中用于将符号与地址相关联的(哈希)符号表(或任何其他面向键/值的数据结构)。

该术语通常不用作通用数据结构的表示法。

您或该课程的制作者搞砸了通用数据结构之间的术语(例如"哈希表","地图",& #34;字典"它们是存储按键排序和访问的值的数据结构的所有备用名称)和通用数据结构的特定应用程序("符号表&#34 ;)用于存储与名称相关的地址的编译器和链接器技术。

答案 1 :(得分:2)

Set只存储值,而不是键值对。

本课程描述的符号表通常称为地图。使用"符号表"是不合适的。作为抽象的名称,因为它可能没有以表格方式实现,也可能不存储符号。

因此,Set和Map之间的区别在于Map将键映射到值,并且可以查找与键对应的值,而Set只存储值,并且只能 test 是否价值本身。虽然Set可以通过使用Map并将每个要插入的元素映射到自身来实现,或者如您所建议的那样为null。

具有单独的Set抽象的目的是向其他程序员发信号通知映射不重要,并抽象出" dummy"值(值的空值或副本),这可以节省输入并减少程序员的认知负担。

相关问题