使用C语言,在线性表的第i个位置插入一个元素,并输出插入该元素后的线性表
时间: 2024-11-20 08:39:35 浏览: 13
基于C语言实现线性表的建立、插入、删除、查找等基本操作.zip
在C语言中,如果我们想在线性表(数组或链表)的第i个位置插入一个元素,通常有两种情况:
1. **数组**:
如果线性表是通过数组实现的,假设数组名为`arr`,我们需要首先检查索引`i`是否越界。然后将数组从`i+1`位置开始的所有元素向右移动一位,最后把新元素插入到`arr[i]`位置。示例代码如下:
```c
void insertArray(int arr[], int n, int i, int elem) {
if (i < 0 || i > n) {
printf("Invalid index\n");
return;
}
for (int j = n; j > i; j--) {
arr[j] = arr[j - 1];
}
arr[i] = elem;
}
// 输出插入元素后的数组
printf("After insertion: ");
for (int k = 0; k <= n; k++) {
printf("%d ", arr[k]);
}
```
2. **链表**:
对于动态大小的链表,我们可以创建一个新的节点并调整指针,使其指向新的位置。这里需要遍历找到第`i`个元素的前一个元素,然后更新链接。插入操作大致如下:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
void insertLinkedList(Node** head, int i, int elem) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = elem;
new_node->next = *head;
if (i == 0) {
new_node->next = NULL;
*head = new_node;
} else {
Node* current = *head;
for (int j = 0; j < i - 1; j++) {
if (!current->next) {
printf("Index out of range\n");
return;
}
current = current->next;
}
new_node->next = current->next;
current->next = new_node;
}
}
// 检查并输出插入后的链表
void printList(Node* head) {
Node* temp = head;
while (temp) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
```
请记得处理边界条件和内存管理。在实际应用中,你可能还需要考虑线程同步、错误处理等问题。
阅读全文