一个链接列表,它所拥有的数据是动态的。

问题描述 投票:0回答:1

我最近一直在看关于链接列表的文章。一个普通的链接列表(在这之后,我把它叫做 "ll only")有以下几个方面。

typedef struct linked_list{
    int data;
    struct linked_list *next;
}linked_list;

这里的问题是我们存储的数据类型固定为int。我需要做一个不同的来分别存放float数据,char数据.所以,我想到了为什么不以这种方式来实现。

typedef struct linked_list{
    union data{
        int data;
        char data;
        float data;
    };
    struct linked_list *next;
}linked_list;   

这让我更接近于我的愿望,即在数据方面也是动态的. 现在,我有两个问题。1. 2.这将迫使我使用一个通用的指针有一个参数的push函数。通用指针是一件好事吗?

还有一个我想到的实现。

typedef struct linked_list{
    void *data;
    struct linked_list *next;
}linked_list;

有什么问题?

c data-structures struct linked-list union
1个回答
1
投票
  • 这样效率高吗?

定义了union后,你将有三个不同的面来观察。另外,联合体覆盖了一个对象,有不同类型的解释。我会从可扩展性的角度看问题。有了这个,你大概可以在未来创建一个具有更大数据结构的union。这样会稍微增加整个程序的内存消耗。

  • 这将迫使我使用一个通用指针有一个参数的push函数。通用指针是个好东西吗?

它是无罪的。

从我这边来说,而不是生成特定底层数据的列表结构。你可以尝试重用(理解更通用的实现),比如这里。https:/elixir.bootlin.comlinuxlatestsourceincludelinuxlist.h。

https:/algorithmsandme.comlinked-list-implementation-in-linux-kernel。

在内核中,list接口你可以创建你的数据结构,并在里面嵌入一个list。我希望这能帮助你扩展你的可能性。

© www.soinside.com 2019 - 2024. All rights reserved.