在C中创建集合ADT
我正在尝试创建一个ADT 它是一组动态有限元。它必须使用数组和链表来实现 一些操作包括在C中创建集合ADT,c,set,structure,adt,C,Set,Structure,Adt,我正在尝试创建一个ADT 它是一组动态有限元。它必须使用数组和链表来实现 一些操作包括add(set,x)和remove(set,x) 我知道我首先需要创建一个接口,该接口对于数组实现和链表实现都是通用的 但是,我不确定这种数据类型的结构。我应该包括什么 struct test { int x; char y; }; 像这样的?或者假设我将集合设为整数的独占,那么数据结构将涉及什么 非常感谢您的帮助。谢谢 这是结构的原理,您可以将所有类型的变量放入其中 我想你应该创建一个int
add(set,x)
和remove(set,x)
我知道我首先需要创建一个接口,该接口对于数组实现和链表实现都是通用的
但是,我不确定这种数据类型的结构。我应该包括什么
struct test {
int x;
char y;
};
像这样的?或者假设我将集合设为整数的独占,那么数据结构将涉及什么
非常感谢您的帮助。谢谢 这是结构的原理,您可以将所有类型的变量放入其中 我想你应该创建一个int数组。 声明如下:
int tab["number of int you want"];
然后像这样访问它:
tab["number of case of the int you want to access"];
因为这是为学校准备的,我不会给你们一个实现,但我会给你们指出正确的方向。使用数组和列表创建“哈希表”。有关详细信息,请参阅 为了简单起见,我们假设它是一组整数。 本质上,您需要一个包含N个“bucket”的数组
哈希表
,即列表。要添加元素x
,您需要执行hash_table[hash(x)%N]
以获取“bucket”(列表)x
应该进入的,如果它不在列表中,则将其添加到该列表中
要删除x
,请执行hash_table[hash(x)%N]
以获取您的bucket,并删除x
(如果存在)
如果您可以实现这些功能,search(set,x)
就很简单了。您还可以尝试实现union(setA,setB)
,intersect(setA,setB)
,difference(setA,setB)
,isSubset(setA,setB)
,等等。您可能还需要仔细阅读,并查看包含底部实现链接的条目
祝你好运,快乐。如果你被卡住了,在这里提问总是可以的,所以下次只需发布代码即可。:) 如果我只做一组数字,我就会失去结构的意义,不是吗?结构就像一种变量。你可以把“int”,“char”等。。。然后在代码中查看或修改这个结构的值。哦,是的,很有意义。基本上,数组就是一种结构。不,它真的不同!如果需要,可以创建结构数组。结构是一种变量,您可以在其中放置所需的所有变量。数组是一种保存变量的方法。我明白了。因此,在创建这个只将数字存储为元素的集合ADT时,我还必须创建一个数据结构。结构应该只包含一个int数组?或者我应该包括任何其他变量,指向结构的指针,也许。。。?谢谢你的回复,顺便说一句!需要更多信息。您是在考虑数学意义上的有限集(其中允许重复元素),还是像Python/Java/等中那样的
set()
(只有唯一的元素)?您正在尝试选择一个数据结构来优化add()
和remove()
操作,或者像union()
或intersect()
这样的其他操作吗?为什么选择数组和链表?你有很多数据结构可供选择,为什么“必须”用它们来实现呢?我是从数学的角度来思考的。基本上,我所要做的就是添加或删除一个元素,然后尝试一些函数,比如检查元素是否存在()、联合()、交集()、基数()……基本上,我需要创建一个动态集合ADT,并使用数组和链表实现它,但我真的很困惑,不确定从哪里开始。我的问题是,你必须使用C还是可以使用C++?您必须使用数组/列表,还是可以使用树/哈希表?这是家庭作业吗?是的,这是我在学校做的一个项目。必须使用C,仅限于数组和链表。Aaa,非常感谢!真的很有帮助,信息丰富。我会想办法的。谢谢!