C编程结构/动态内存

时间:2015-06-15 20:20:17

标签: c

typedef struct {
  char * fname; 
  char * lname;
} single_entry;

我正在进行一项我们无法使用的练习:

single_entry * next; 

创建链接列表。

如何在不使用链接列表的情况下完成相同的操作?我在考虑制作另类这样的结构吗?

typedef struct {
  single_entry * next;
} myEntry;

我怎么用这个呢?我对一个结构中的所有东西都非常熟悉。

1 个答案:

答案 0 :(得分:1)

typedef struct 
{
    char *fname; 
    char *lname;
} single_entry;

typedef struct
{
    single_entry *array;
    unsigned size, capacity;
} se_array;

void initialise(se_array *sarray)
{
    sarray->size = 0;
    sarray->capacity = 0;
}

void add_to_array(se_array *sarray, single_entry entry)
{
    if(sarray->capacity == 0)
    {
        sarray->array = malloc(sizeof(single_entry) * (sarray->capacity = 3));
        sarray->array[sarray->size++] = entry;
    }
    else if(sarray->capacity == sarray->size)
    {
    sarray->array = realloc(sarray->array, sizeof(single_entry) * (sarray->capacity *= 1.5));
    sarray->array[sarray->size++] = entry;
    }
    else
    {
    sarray->array[sarray->size++] = entry;
    }
}

int main(void)
{
    se_array my_array;
    initialise(&my_array);
    single_entry my_entry;
    strcpy(my_entry.fname, "first");
    strcpy(my_entry.lname, "last");
    add_to_array(&my_array, my_entry);
    my_array.array[0].fname; // element 0 fname
}