C - 我可以对这两个不同的列表使用相同的功能吗?

时间:2018-05-13 20:51:24

标签: c pointers struct linked-list

我所涉及的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指针,根据需要进行转换,但这意味着我的函数必须有两个部分。

我希望改变我的结构的结构,以便它们允许我简单地使用相同的功能,而不需要演员表,或者至少使用最小的功能。

它们非常相似,你可以看到,但没有任何想法。任何想法将不胜感激。干杯!

1 个答案:

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