用c语言写出详细代码实现以单链表作为存储结构,将线性表扩展2倍,假设线性表为(a1,az,…,a),扩展后为(a1,a1,a2,az,…,an,an)
时间: 2024-10-11 14:13:24 浏览: 23
在C语言中,我们可以使用单链表数据结构来扩展线性表。这里是一个简单的示例,我们首先创建一个节点结构体,然后定义链表扩展函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点并分配内存
Node* create_node(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 扩展链表函数
void double_linked_list(Node** head) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
Node* old_head = *head;
Node* new_head = old_head;
// 双倍复制每个节点
while (old_head != NULL) {
Node* temp = old_head->next;
old_head->next = create_node(old_head->data);
old_head->next->next = temp;
old_head = temp;
}
// 更新头指针,指向新链表的头
*head = new_head;
}
// 打印链表
void print_list(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
// 初始化链表
Node* head = create_node(1); // a1
head->next = create_node(2); // a2
head->next->next = create_node(3); // a3
// ... 更多节点
// 打印原始链表
printf("Original list:\n");
print_list(head);
// 扩展链表
double_linked_list(&head);
// 再次打印新的链表
printf("Extended list:\n");
print_list(head);
return 0;
}
```
这段代码首先定义了一个链表节点,然后实现了链表的扩展功能`double_linked_list`。在这个函数中,我们遍历原链表并将每个元素复制两次。注意,在实际应用中,你需要确保链表的所有操作(如插入、删除等)都在正确的边界上进行。
阅读全文