我需要创建以下内容: 一个通用的有限但动态的集合,初始化为包含任意类型的任意数量的项目 没有任何特定的顺序,也没有重复的值。
所以我开始创建一个包含数组(基本上是集合)和集合名称的结构:
typedef struct set{
char name; /* A unique identifier for every set */
int value[]; /* A dynamic array of integers; the set */
} Set;
我把它放在头文件中作为接口。
我现在陷入了实施层面。我需要创建一个函数,基本上:
create()
但是,我不确定如何使值[]成为动态数组。我知道我必须使用malloc,但我有点困惑。
我试过这段代码无济于事:
Set * create()
{
Set S;
int n;
int * ptd;
S.value * ptd = (int *) malloc(n * sizeof(int));
}
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
为什么不在struct中声明int*
本身?
int *value; /* A dynamic array of integers; the set */
使用..分配内存
S.value =malloc(n * sizeof(int));
答案 1 :(得分:0)
重新定义设置为具有动态指针:
typedef struct set{
char name; /* A unique identifier for every set */
int *value; /* A dynamic array of integers; the set */
int numberOfValues; /* The number of actual values currently in the set */
int sizeOfArray; /* The number of elements allocated (must be >= numberOfValues) */
} Set;
create
需要一个返回值,它还需要动态分配集合结构本身。修改create
,如下所示:
Set * create()
{
Set *S;
S = malloc(sizeof(Set));
S->name = NULL;
S->numberOfValues = 0;
S->sizeOfArray = 32;
S->value = malloc(S.sizeOfArray * sizeof(int));
return S;
}
每次向集合中添加内容时,都必须检查S.sizeOfArray
是否足够大以包含新元素。如果没有,则必须重新分配S.value
并将新大小存储在S.sizeOfArray
中。此外,请确保每次向集合添加元素时都增加S.numberOfValues
!
答案 2 :(得分:-1)
要创建动态数组,您必须在创建字符串时使用指针数组。字符串基本上是char的动态数组,因此您可以执行类似char * msg =“Hello”的操作。这同样适用于int。要控制结构中不重复任何元素,您必须实现Contains方法并添加if!Contains(x)。