鱼C论坛

 找回密码
 立即注册
查看: 126|回复: 1

[学习笔记] 顺序表的基本操作——插入

[复制链接]
发表于 2025-4-11 00:24:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#define MaxSize 10        //定义最大长度
typedef struct{
        int data[MaxSize];        //用静态的“数组”存放数据元素
        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[j]=L.data[j-1]; } //注意位序、数组下标的关系,并从后面的元素依次移动
        L.data[i-1]=e;        //在位置i出放入e
        L.length++;        //长度加一
        return true;
}

int main(){
        SqList L;        //声明一个顺序表
        InitList(L);        //初始化顺序表
        //。。。此处省略一些代码,插入几个元素
        ListInsert(L,3,3);
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-11 00:25:08 | 显示全部楼层

  1. #include <stdio.h> // 添加缺失的头文件
  2. #define MaxSize 10

  3. typedef struct {
  4.     int data[MaxSize]; // 修正:数组声明缺少[]
  5.     int length;
  6. } SqList;

  7. // 初始化函数补充(原代码未给出)
  8. void InitList(SqList &L) {
  9.     L.length = 0;
  10. }

  11. bool ListInsert(SqList &L, int i, int e) { // 修正:函数名拼写错误
  12.     if (i < 1 || i > L.length + 1) return false;
  13.     if (L.length >= MaxSize) return false;

  14.     // 修正:移动元素逻辑错误
  15.     for (int j = L.length; j >= i; j--) {
  16.         L.data[j] = L.data[j-1]; // 正确后移元素
  17.     }
  18.     L.data[i-1] = e; // 修正:数组下标应为i-1
  19.     L.length++;
  20.     return true;
  21. }

  22. int main() {
  23.     SqList L;
  24.     InitList(L);
  25.     ListInsert(L, 3, 3); // 此处实际会插入失败,因为此时顺序表为空
  26.     return 0;
  27. }
复制代码


主要修改说明:

  • 1. 数组声明修正:原结构体缺少数组声明的[]符号
  • 2. 函数名修正:原ListTnsert拼写错误改为ListInsert
  • 3. 元素移动逻辑修正:原L.data = L.data改为正确的数组元素移动方式
  • 4. 插入位置修正:数组下标应从i-1开始(位序从1开始,数组下标从0开始)
  • 5. 补充初始化函数:添加必须的初始化逻辑


插入操作要点:
1. 判断插入位置合法性:i ∈ [1, length+1]
2. 元素后移必须从最后一个元素开始移动
3. 插入成功后需要更新表长
4. 时间复杂度:最好O(1),最坏O(n),平均O(n)

常见错误:忘记数组下标和位序的转换(位序i对应数组下标i-1)!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 16:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表