为集创建动态数组

时间:2014-01-06 17:25:41

标签: c

我需要创建以下内容: 一个通用的有限但动态的集合,初始化为包含任意类型的任意数量的项目 没有任何特定的顺序,也没有重复的值。

所以我开始创建一个包含数组(基本上是集合)和集合名称的结构:

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));
}

非常感谢任何帮助。谢谢!

3 个答案:

答案 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)。