编写算法实现下列问题的求解。 1. 在第i个结点位置插入值为x的结点。 实验测试数据基本要求: 第一组数据:顺序表长度n≥10,x=100, i分别为5,n,n+1,0,1,n+2 第二组数据:顺序表长度n=0,x=100,i=5
时间: 2024-05-13 18:13:35 浏览: 40
链表的第i个结点后插入结点
算法如下:
1. 检查输入的i是否合法,即i大于等于0且小于等于当前顺序表的长度加1。
2. 如果当前顺序表已满,则扩展容量。
3. 从最后一个元素开始,依次将元素向后移动一个位置,直到第i个位置为空。
4. 在第i个位置插入新元素x。
代码实现如下:
```
void insert(int* list, int n, int i, int x) {
if (i < 0 || i > n) {
printf("Invalid index.\n");
return;
}
if (n >= MAXSIZE) {
printf("List is full.\n");
return;
}
for (int j = n - 1; j >= i; j--) {
list[j + 1] = list[j];
}
list[i] = x;
}
```
第一组数据测试结果:
```
int list[MAXSIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = 10;
insert(list, n, 5, 100); // 在第5个位置插入100
for (int i = 0; i < n + 1; i++) {
printf("%d ", list[i]);
}
// 输出:1 2 3 4 5 100 6 7 8 9 10
insert(list, n, n, 100); // 在最后一个位置插入100
for (int i = 0; i < n + 1; i++) {
printf("%d ", list[i]);
}
// 输出:1 2 3 4 5 6 7 8 9 10 100
insert(list, n, n + 1, 100); // 在超出范围的位置插入100
// 输出:Invalid index.
insert(list, n, -1, 100); // 在超出范围的位置插入100
// 输出:Invalid index.
```
第二组数据测试结果:
```
int list[MAXSIZE] = {};
int n = 0;
insert(list, n, 5, 100); // 在第5个位置插入100
for (int i = 0; i < n + 1; i++) {
printf("%d ", list[i]);
}
// 输出:100
```
阅读全文