宁古塔 发表于 2019-9-27 02:37:30

线性表删除元素

/*初始条件:顺序线性表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 = L->data;
                }
        }
       
        *e=L->data; // 将元素删除
        L->length--;
       
        return OK;
}
请问这样写正确吗?错在哪里,另外data[]中的内容与k变量所表示的内容都是指数组排序,那为什么要引入数组呢?

yuweb 发表于 2019-9-27 09:09:43

本帖最后由 yuweb 于 2019-9-27 09:23 编辑


StatusListDelete(SqList *L, int i, ElemType *e)
{
      int k;
      
      if( L->length == MINSIZE )      //顺序线性表为空表
      {
                return ERROR;
      }
      if( i<1 || i>L->length ) //这边的L-length应该是L->length
      {
                return ERROR;
      }
      if( i<L->length ) //这边的L-length应该是L->length
      {
                /*将要删除位置后数据向前移动一位*/
                for( k=i-1; k<=L->length-1; k++)//这边的L-length应该是L->length
                {
                        L->data = L->data;
                }
      }
      
      *e=L->data; // 将元素删除
      L->length--;
      
      return OK;
}
顺序线性表的删除过程是先将表中第i+1个元素到第n个元素依次向前移动一个单位长度,然后将线性表的长度减一
顺序线性表表是用一组地址连续的存储单元依次存储线性表的数据元素,类似于数组,可以用下标访问到特定位置的元素,声明差不多是下面这样吧(存储空间基址就是类似数组的首地址)
typedef struct{
    ElemType *elem;   //存储空间基址
    int length;         //当前长度
}SqList;
楼主的逻辑没什么问题,就是代码中的小错误而已
页: [1]
查看完整版本: 线性表删除元素