c语言创建一个单链表,已存在5个元素,编写一个函数,实现第i个位置插入数据元素x的功能。调用这个函数,插入数据和位置从键盘输入。
时间: 2024-12-12 08:28:20 浏览: 4
在C语言中,你可以使用结构体来表示链表节点,并定义一个指向头结点的指针。这里是一个简单的例子,展示如何创建一个单链表并在指定位置插入新的元素:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点并分配内存
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data;
newNode->next = NULL;
}
return newNode;
}
// 插入元素到链表的指定位置
void insertAtPosition(Node** head, int i, int x) {
if (*head == NULL || i <= 0) {
printf("Invalid input or empty list.\n");
return;
}
Node* newNode = createNode(x);
Node* current = *head;
for (int j = 1; j < i && current != NULL; j++) {
current = current->next;
}
if (current == NULL) {
printf("Index out of range.\n");
return;
}
newNode->next = current->next;
current->next = newNode;
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 初始化链表
Node* head = NULL;
int numElements = 5;
for (int i = 1; i <= numElements; i++) {
int data;
printf("Enter element %d: ", i);
scanf("%d", &data);
head = insertAtPosition(&head, i, data); // 插入数据
}
// 打印插入后的链表
printList(head);
return 0;
}
```
在这个程序中,`insertAtPosition` 函数会接收链表头结点的地址、插入位置 `i` 和新元素 `x`,然后在链表的相应位置插入新节点。注意,索引是从1开始的。
当你运行这个程序时,它将提示你输入每个位置的数据值和要插入的位置。插入操作会在主函数中完成。
阅读全文