我所涉及的uni项目涉及将一大组数据分类到两个不同的列表中,一个列表包含城市或国家/地区的数据,另一个列表具有相同的数据(这次是在城市中),但也有一些坐标,如:
//used for cities and countries in the textual mode
typedef struct node{
int year;
int month;
float temp;
char* name;
struct node* next;
struct node* prev;
} node_t;
//used for cities in the graphical mode
typedef struct City{
node_t data;
float latitude;
float longitude;
} City;
这就是我设置它的方式,但它不允许我使用相同的功能,因为我的指针是“节点”,而不是“城市&#” 39 ;.我可以让它们像第二个一样,但是在内存中放入50万个条目,每个条目有两个空的浮动,这将是一种不必要的和有问题的。
我希望对它们使用相同的功能。这些函数是您常用的链接列表,如排序插入等。我之前尝试使用void指针,根据需要进行转换,但这意味着我的函数必须有两个部分。
我希望改变我的结构的结构,以便它们允许我简单地使用相同的功能,而不需要演员表,或者至少使用最小的功能。
它们非常相似,你可以看到,但没有任何想法。任何想法将不胜感激。干杯!
答案 0 :(得分:0)
您可以修改链表实现,以使用void *作为数据指针。
struct Node
{
void *data;
struct Node *next;
}
插入功能应如下所示:
Node * insert (struct Node *h, void *data, size_t data_size)
{
Node *node = malloc(sizeof(Node));
node->data = malloc(data_size);
memcpy(node->data, data, data_size);
node->next = h;
h = node;
return h;
}
插入城市或任何其他类型时:
City* city = malloc(sizeof(City));
insert(head, city, sizeof(City));