鱼C论坛

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

[学习笔记] 顺序表的删除

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

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

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

x
#include <stdio.h>
#define MaxSize 10        //定义最大长度
typedef struct{
        int data[MaxSize];        //用静态的“数组”存放数据元素
        int length;        //顺序表的当前长度
}SqList;        //顺序表的类型定义

//基本操作:在L的位序i处插入元素e.
bool ListDelete(SqList &L,int i,int &e){
        if(i<1||i>L.length+1){        //判断i的范围是否有效
                return false;
        }
        e=L.data[i-1];        //将被删除的元素赋值给e
        for(int j=i;j<L.length;j++){        //将第i个位置后的元素前移
                L.data[j-1]=L.data[j]; }         //注意位序、数组下标的关系,并从前面的元素依次移动  
        L.length--;        //线性表长度减一
        return true;
}

int main(){
        SqList L;        //声明一个顺序表
        InitList(L);        //初始化顺序表
        //。。。此处省略一些代码,插入几个元素
        int e=-1;        //用变量e把删除的元素“带回来”
        if(ListDelete(length,3,e)){
                printf("已删除第3个元素,删除元素值为=%d\n",e);
        }else{
                printf("位序i不合法,删除失败\n");
        }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-11 01:11:57 | 显示全部楼层
顺序表删除操作代码修正

你提供的代码存在几个关键问题,修正后的代码如下:


  1. #include <stdio.h>  // 补全头文件
  2. #define MaxSize 10

  3. typedef struct {
  4.     int data[MaxSize];  // 修正:这里应该定义数组
  5.     int length;
  6. } SqList;

  7. bool ListDelete(SqList &L, int i, int &e) {
  8.     if (i < 1 || i > L.length) {  // 修正判断条件
  9.         return false;
  10.     }
  11.     e = L.data[i-1];  // 修正:获取被删除元素
  12.    
  13.     // 删除位置后的元素前移
  14.     for (int j = i; j < L.length; j++) {  // 修正循环条件
  15.         L.data[j-1] = L.data[j];
  16.     }
  17.    
  18.     L.length--;  // 表长减1
  19.     return true;
  20. }
复制代码


主要修正点说明:
  • 原代码缺少数组定义,结构体中的 int data 应改为 int data[MaxSize]
  • 删除位置判断条件错误,正确范围应为 i < 1 || i > L.length
  • 元素前移时,原代码循环条件应改为 j < L.length
  • 被删除元素赋值应使用 L.data[i-1](数组下标从0开始)


使用示例:

  1. int main() {
  2.     SqList list = {{1,2,3,4,5}, 5};  // 初始化顺序表
  3.     int deleted_value;
  4.    
  5.     if (ListDelete(list, 3, deleted_value)) {
  6.         printf("删除成功,被删除元素:%d", deleted_value);
  7.     } else {
  8.         printf("删除失败");
  9.     }
  10.     return 0;
  11. }
复制代码


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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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