如何设计一个链表,使得内部数据为不定长多维数据,并实现对它的初始化,求数据元素个数,插入、删除、取数据元素,判断为非空操作
时间: 2023-05-11 11:04:54 浏览: 100
设计一个基于链表的数据结构
为了实现一个链表,使其内部数据为不定长多维数据,我们可以使用结构体来定义链表节点,其中包含一个指向数据的指针和一个指向下一个节点的指针。数据指针可以指向一个动态分配的数组,数组中的元素可以是任意类型的数据,包括多维数据。
以下是一个示例代码:
```
typedef struct Node {
void* data;
struct Node* next;
} Node;
typedef struct List {
Node* head;
int size;
} List;
void initList(List* list) {
list->head = NULL;
list->size = 0;
}
int getSize(List* list) {
return list->size;
}
void insert(List* list, void* data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = list->head;
list->head = node;
list->size++;
}
void delete(List* list, void* data) {
Node* prev = NULL;
Node* curr = list->head;
while (curr != NULL) {
if (curr->data == data) {
if (prev == NULL) {
list->head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
list->size--;
break;
}
prev = curr;
curr = curr->next;
}
}
void* get(List* list, int index) {
Node* curr = list->head;
int i = 0;
while (curr != NULL && i < index) {
curr = curr->next;
i++;
}
if (curr != NULL) {
return curr->data;
} else {
return NULL;
}
}
int isEmpty(List* list) {
return list->size == 0;
}
```
在这个示例代码中,我们使用了 void* 类型的指针来表示不定长多维数据,这样可以方便地存储任意类型的数据。在初始化链表时,我们将头节点指针设置为 NULL,表示链表为空。在插入数据时,我们创建一个新的节点,将数据指针赋值给它,然后将它插入到链表的头部。在删除数据时,我们遍历链表,找到要删除的节点,然后将它从链表中移除。在获取数据时,我们遍历链表,找到指定位置的节点,然后返回它的数据指针。在判断链表是否为空时,我们只需要判断链表的大小是否为 0。
希望这个示例代码能够帮助你实现一个链表,使其内部数据为不定长多维数据,并实现对它的初始化,求数据元素个数,插入、删除、取数据元素,判断为非空操作。
阅读全文