下面算法功能是:在顺序表中,第i个元素前插入元素e。请将算法补充完整。#include<stdio.h>#include <math.h>#include <stdlib.h> #define LIST INIT SIZE 100#define LISTINCREAMENT 10 typedef int ElemType; typedef struct{ ElemType *elem; int length; int listsize;}SqList; bool ListInsert Sq(SqList &L, int i, ElemType e){ ElemType *p,*q; if(i<1|li>L.length+1) { printf"插入位置不正确!"); return false: if(L.length >= L.listsize) ElemType*newbase(ElemType*)realloc(L.elem,(LIST INITSIZE+LISTINCREAMENT)*sizeof(ElemType)) if!newbase) { printf("overflow!"); return false;} L.elem=newbase; L.listsize+=LISTINCREAMENT; /*将第i到第n个元素向后移动一位,将e插入到第i个元素的位置,表长增 1*1 return true;}
时间: 2024-01-02 11:04:46 浏览: 103
算法补充完整如下:
```
bool ListInsert(SqList &L, int i, ElemType e){
ElemType *p,*q;
if(i<1 || i>L.length+1) {
printf("插入位置不正确!");
return false;
}
if(L.length >= L.listsize) {
ElemType *newbase = (ElemType*)realloc(L.elem,(LISTINITSIZE+LISTINCREAMENT)*sizeof(ElemType));
if(!newbase) {
printf("overflow!");
return false;
}
L.elem = newbase;
L.listsize += LISTINCREAMENT;
}
q = &(L.elem[i-1]);
for(p = &(L.elem[L.length-1]); p>=q; --p) {
*(p+1) = *p;
}
*q = e;
++L.length;
return true;
}
```
具体思路:
- 判断插入位置是否正确,如果不正确则返回 false。
- 如果当前顺序表已满,则重新分配更大的空间。
- 将第 i 到第 n 个元素向后移动一位,腾出第 i 个元素的位置。
- 将元素 e 插入到第 i 个元素的位置。
- 表长增加 1,返回 true。
阅读全文