用c语言编写用带头节点的循环链表来存储数组 数组存在尾部 随后打印并释放
时间: 2024-11-27 10:09:16 浏览: 11
在C语言中,我们可以使用链表结构来模拟数组,尤其是当需要动态添加或删除元素,并且数组大小未知的情况下。这里是一个简单的示例,我们将创建一个带头结点的循环链表来存储数组,并在需要时打印元素并释放内存。
首先,我们需要定义链表节点结构:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct List {
Node* head;
int size;
} List;
```
然后,我们可以定义一个函数来初始化链表,并将数组内容添加到链表中:
```c
void create_list_from_array(int arr[], int n, List* list) {
list->head = (Node*)malloc(sizeof(Node));
list->size = n;
list->head->data = arr[0];
for (int i = 1; i < n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = list->head->next;
list->head->next = newNode;
if (i == n - 1)
list->head->next = list->head; // 设置循环链表结构
}
}
```
接下来,我们有一个函数用于遍历并打印链表中的元素:
```c
void print_list(List* list) {
Node* current = list->head;
do {
printf("%d ", current->data);
current = current->next;
} while (current != list->head);
printf("\n");
}
// 释放链表内存
void free_list(List* list) {
Node* temp = list->head;
while (temp != NULL) {
Node* next = temp->next;
free(temp);
temp = next;
}
}
```
现在你可以这样使用这个链表:
```c
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
List myList;
create_list_from_array(arr, n, &myList);
print_list(&myList);
free_list(&myList); // 打印完后释放内存
return 0;
}
```
阅读全文