使用c语言,在线性表第i个位置中插入新的数据元素e,线性表长度加1
时间: 2024-09-10 15:04:08 浏览: 61
在C语言中,如果你有一个已经存在的线性表,要在第i个位置插入新的数据元素e,并将长度加一,你需要考虑线性表的数据结构,这里我们假设是单链表。以下是针对这种场景的一个简单实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 简单的单链表节点结构
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 创建新节点
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 在链表第i个位置插入元素e
void insertAtPosition(ListNode** head, int i, int e) {
if (*head == NULL || i <= 0) {
printf("无效的操作,链表为空或位置无效。\n");
return;
}
// 新建一个节点并赋值为e
ListNode* newNode = createNode(e);
// 插入节点
if (i == 1) { // 如果要插入的是第一个位置
newNode->next = *head;
*head = newNode;
} else {
ListNode* prev = *head;
ListNode* curr = prev->next;
for (int j = 1; j < i && curr != NULL; j++) {
prev = curr;
curr = curr->next;
}
if (curr != NULL) {
newNode->next = curr;
prev->next = newNode;
} else {
printf("插入位置超出链表范围。\n");
}
}
}
int main() {
ListNode* head = NULL;
int length = 0;
printf("请输入线性表的初始长度(包含头节点): ");
scanf("%d", &length);
// 初始化头节点
for (int i = 0; i < length; i++) {
int value;
printf("请输入第 %d 个位置的数据: ", i + 1);
scanf("%d", &value);
ListNode* newNode = createNode(value);
newNode->next = head;
head = newNode;
}
int position;
printf("请输入要插入新元素的位置(从1开始计数): ");
scanf("%d", &position);
int newElement;
printf("请输入新元素的值: ");
scanf("%d", &newElement);
insertAtPosition(&head, position, newElement);
printf("插入元素后,链表的新长度是: %d\n", ++length); // 注意,长度增加1
return 0;
}
```
这个示例中,我们在`insertAtPosition`函数中先检查链表是否为空以及位置的有效性。如果位置有效,我们就遍历链表直到找到目标位置,然后插入新节点。在`main`函数里,用户可以初始化链表并在指定位置插入新元素。
阅读全文