在链表中存储结构数组

时间:2016-10-23 07:08:57

标签: c arrays struct

我有一个名为arrayOfElements的struts数组,每个元素都是一个名为Element

的结构
typedef struct {
    void* data;
    } Element;

数据是一个无效指针,因为我不知道将会存储什么类型的变量

我已经将malloc这个数组有4个元素(这是通过用户输入完成的,但我已经用硬编码4来解决这个问题)

Element* arrayOfElements;
arrayOfElements= malloc(4 * sizeof(Element));

到目前为止,我可以在arrayOfElements

中存储字符串和整数

Store Int

arrayOfElements[0].data = malloc( sizeof(int) );
int *ptr = arrayOfElements[0].data;
*ptr = 65;

存储字符串

arrayOfElements[0].data = malloc( strlen(str) + 1 );
strcpy( arrayOfElements[0].data, str );

这一切都有效。我的问题是我如何制作链接列表并使每个元素存储一个arrayOfElements实例

到目前为止,我的链表是

typedef struct LinkedListNode {
    void** ElementArray;
    struct LinkedListNode* next;
} LinkedListNode;

typedef struct {
    LinkedListNode* head;
} LinkedList;

所以void ** ElementArray将指向每个arrayOfElements

void insert(LinkedList* head, Element inArrayOfElements)
{ 
    LinkedListNode insertNode;

    /* Points ElementArray to inArrayOfElements */
    HOW DO I DO THIS AS ElementArray is a void**

    /* Points next to the head */
    (*insertNode).next = head;

    /* Re-points head to new head of Linked List */
    head = insertNode;
}

我的目标是拥有类似的东西

LINKEDLIST
    +---+    +---+---+----+
    |   | -> |   |   |    |  arrayofElements
    +---+    +---+---+----+    +---+---+----+
    |   | -------------------> |   |   |    |
    +---+    +---+---+----+    +---+---+----+
    |   | -> |   |   |    |
    +---+    +---+---+----+    +---+---+----+
    |   | -------------------> |   |   |    |
    +---+                      +---+---+----+

问题/ TL; DR 我的问题是如何使void ** ElementArray(在链表中)指向arrayOfElements。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题是正确的,就不需要双指针。只是做:

typedef struct LinkedListNode {
    Element* data;
    struct LinkedListNode* next;
} LinkedListNode;


LinkedListNode* insert(LinkedListNode* head, Element* inArrayOfElements)
{ 
    LinkedListNode* insertNode = malloc(sizeof(LinkedListNode));

    insertNode->next = head;
    insertNode->data = inArrayOfElements;
    return insertNode;
}

使用它像:

head = insert(head, someArrayOfElements);

注意:真正的代码应该检查NULL指针,但为了简单起见,我省略了它。