使用C语言,在线性表的第i个位置插入一个元素,并输出插入该元素后的线性表;
时间: 2024-11-20 20:39:40 浏览: 13
基于C语言实现线性表的建立、插入、删除、查找等基本操作.zip
在C语言中,如果你正在处理动态数组或链表这种数据结构,要在线性表的第i个位置插入一个元素,通常有两种情况:
1. 动态数组(如一维数组):
```c
#include <stdio.h>
#include <stdlib.h>
void insertAt(int arr[], int size, int i, int value) {
if (i > size || i <= 0) {
printf("Invalid index!\n");
return;
}
// 如果插入点不是数组最后一个元素,将后面的元素向后移动一位
for (int j = size; j > i; j--) {
arr[j] = arr[j - 1];
}
// 插入新元素
arr[i - 1] = value;
// 输出插入后的数组
for (int k = 0; k <= size; k++) {
printf("%d ", arr[k]);
}
printf("\n");
}
int main() {
int size, i, value;
printf("Enter array size: ");
scanf("%d", &size);
int* arr = malloc(size * sizeof(int));
printf("Enter elements: ");
for (int j = 0; j < size; j++) {
scanf("%d", &arr[j]);
}
printf("Enter position to insert: ");
scanf("%d", &i);
printf("Enter value to insert: ");
scanf("%d", &value);
insertAt(arr, size, i, value);
free(arr); // 别忘了释放内存
return 0;
}
```
2. 链表(使用节点结构):
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
void insertNode(Node** head, int i, int value) {
if (*head == NULL || i <= 0) {
printf("Invalid index!\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (i == 1) {
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
for (int j = 1; j < i && current != NULL; j++) {
current = current->next;
}
if (current != NULL) {
newNode->next = current->next;
current->next = newNode;
} else {
printf("Index out of range!\n");
}
}
}
// 主函数同上,这里省略了打印链表的部分
```
以上代码示例展示了如何分别在线性数组和链表中插入元素并打印结果。记得在操作完成后释放动态分配的内存。
阅读全文