鱼C论坛

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

[已解决]线性表删除元素

[复制链接]
发表于 2019-9-27 02:37:30 | 显示全部楼层 |阅读模式

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

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

x
/*初始条件:顺序线性表L已存在,1<=i<=ListLenght(L)。*/
/*操作结果:将L中第i个位置的数据元素删除返回*e,L长度-1。*/

Status        ListDelete(SqList *L, int i, ElemType *e)
{
        int k;
       
        if( L->length == MINSIZE )        //顺序线性表为空表
        {
                return ERROR;
        }
        if( i<1 || i>L-length ) //当i不在范围内的时候
        {
                return ERROR;
        }
        if( i<L-length ) //当删除位置不在表尾时
        {
                /*将要删除位置后数据向前移动一位*/
                for( k=i-1; k<=L-length-1; k++)
                {
                        L->data[k] = L->data[k+1];
                }
        }
       
        *e=L->data[i-1]; // 将元素删除
        L->length--;
       
        return OK;
}
请问这样写正确吗?错在哪里,另外data[]中的内容与k变量所表示的内容都是指数组排序,那为什么要引入数组呢?
最佳答案
2019-9-27 09:09:43
本帖最后由 yuweb 于 2019-9-27 09:23 编辑

  1. Status  ListDelete(SqList *L, int i, ElemType *e)
  2. {
  3.         int k;
  4.         
  5.         if( L->length == MINSIZE )        //顺序线性表为空表
  6.         {
  7.                 return ERROR;
  8.         }
  9.         if( i<1 || i>L->length ) //这边的L-length应该是L->length
  10.         {
  11.                 return ERROR;
  12.         }
  13.         if( i<L->length ) //这边的L-length应该是L->length
  14.         {
  15.                 /*将要删除位置后数据向前移动一位*/
  16.                 for( k=i-1; k<=L->length-1; k++)//这边的L-length应该是L->length
  17.                 {
  18.                         L->data[k] = L->data[k+1];
  19.                 }
  20.         }
  21.         
  22.         *e=L->data[i-1]; // 将元素删除
  23.         L->length--;
  24.         
  25.         return OK;
  26. }
复制代码

顺序线性表的删除过程是先将表中第i+1个元素到第n个元素依次向前移动一个单位长度,然后将线性表的长度减一
顺序线性表表是用一组地址连续的存储单元依次存储线性表的数据元素,类似于数组,可以用下标访问到特定位置的元素,声明差不多是下面这样吧(存储空间基址就是类似数组的首地址)
  1. typedef struct{
  2.     ElemType *elem;     //存储空间基址
  3.     int length;         //当前长度
  4. }SqList;
复制代码

楼主的逻辑没什么问题,就是代码中的小错误而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-27 09:09:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 yuweb 于 2019-9-27 09:23 编辑

  1. Status  ListDelete(SqList *L, int i, ElemType *e)
  2. {
  3.         int k;
  4.         
  5.         if( L->length == MINSIZE )        //顺序线性表为空表
  6.         {
  7.                 return ERROR;
  8.         }
  9.         if( i<1 || i>L->length ) //这边的L-length应该是L->length
  10.         {
  11.                 return ERROR;
  12.         }
  13.         if( i<L->length ) //这边的L-length应该是L->length
  14.         {
  15.                 /*将要删除位置后数据向前移动一位*/
  16.                 for( k=i-1; k<=L->length-1; k++)//这边的L-length应该是L->length
  17.                 {
  18.                         L->data[k] = L->data[k+1];
  19.                 }
  20.         }
  21.         
  22.         *e=L->data[i-1]; // 将元素删除
  23.         L->length--;
  24.         
  25.         return OK;
  26. }
复制代码

顺序线性表的删除过程是先将表中第i+1个元素到第n个元素依次向前移动一个单位长度,然后将线性表的长度减一
顺序线性表表是用一组地址连续的存储单元依次存储线性表的数据元素,类似于数组,可以用下标访问到特定位置的元素,声明差不多是下面这样吧(存储空间基址就是类似数组的首地址)
  1. typedef struct{
  2.     ElemType *elem;     //存储空间基址
  3.     int length;         //当前长度
  4. }SqList;
复制代码

楼主的逻辑没什么问题,就是代码中的小错误而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 23:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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