顺序表的基本操作——插入
#include <stdio.h>#define MaxSize 10 //定义最大长度
typedef struct{
int data; //用静态的“数组”存放数据元素
int length; //顺序表的当前长度
}SqList; //顺序表的类型定义
//基本操作:在L的位序i处插入元素e.
bool ListTnsert(SqList &L,int i,int e){
if(i<1||i>L.length+1){ //判断i的范围是否有效
return false;
}
if(L.length>=MaxSize){ //当前存储空间已满,不能插入
return false;
}
for(int j=L.length;j>=i;j--){ //将第i个元素及之后的元素后移
L.data=L.data; } //注意位序、数组下标的关系,并从后面的元素依次移动
L.data=e; //在位置i出放入e
L.length++; //长度加一
return true;
}
int main(){
SqList L; //声明一个顺序表
InitList(L); //初始化顺序表
//。。。此处省略一些代码,插入几个元素
ListInsert(L,3,3);
return 0;
}
#include <stdio.h> // 添加缺失的头文件
#define MaxSize 10
typedef struct {
int data; // 修正:数组声明缺少[]
int length;
} SqList;
// 初始化函数补充(原代码未给出)
void InitList(SqList &L) {
L.length = 0;
}
bool ListInsert(SqList &L, int i, int e) { // 修正:函数名拼写错误
if (i < 1 || i > L.length + 1) return false;
if (L.length >= MaxSize) return false;
// 修正:移动元素逻辑错误
for (int j = L.length; j >= i; j--) {
L.data = L.data; // 正确后移元素
}
L.data = e; // 修正:数组下标应为i-1
L.length++;
return true;
}
int main() {
SqList L;
InitList(L);
ListInsert(L, 3, 3); // 此处实际会插入失败,因为此时顺序表为空
return 0;
}
主要修改说明:
[*]1. 数组声明修正:原结构体缺少数组声明的[]符号
[*]2. 函数名修正:原ListTnsert拼写错误改为ListInsert
[*]3. 元素移动逻辑修正:原L.data = L.data改为正确的数组元素移动方式
[*]4. 插入位置修正:数组下标应从i-1开始(位序从1开始,数组下标从0开始)
[*]5. 补充初始化函数:添加必须的初始化逻辑
插入操作要点:
1. 判断插入位置合法性:i ∈
2. 元素后移必须从最后一个元素开始移动
3. 插入成功后需要更新表长
4. 时间复杂度:最好O(1),最坏O(n),平均O(n)
常见错误:忘记数组下标和位序的转换(位序i对应数组下标i-1)!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]