卡卡西偏南45度 发表于 2013-7-18 20:01:25

小甲鱼老师的第八讲 线性表3的代码

那个eleminsert的代码里的 for( k=L->length-1; k >= i-1; k-- )
      {
            L->data = L->data;
      }
k=L->length-1里是不是多减了个1啊,斗胆问问?/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L)。 */
/* 操作结果:在L中第i个位置之前插入新的数据元素e,L长度+1。*/

Status ListInsert(SqList *L, int i, ElemType e)
{
    int k;

    if( L->length == MAXSIZE )// 顺序线性表已经满了
    {
      return ERROR;
    }
    if( i<1 || i>L->length+1)   // 当i不在范围内时
    {
      return ERROR;
    }
    if( i <= L->length )   // 若插入数据位置不在表尾
    {
      /* 将要插入位置后数据元素向后移动一位 */
      for( k=L->length-1; k >= i-1; k-- )
      {
            L->data = L->data;
      }
    }

    L->data = e;// 将新元素插入
    L->length++;

    return OK;
}

He2toN 发表于 2013-7-19 11:49:28

没有多,因为数组是从0开始的,数组的第一个是data ,最后一个是data

卡卡西偏南45度 发表于 2013-7-20 11:33:30

He2toN 发表于 2013-7-19 11:49 static/image/common/back.gif
没有多,因为数组是从0开始的,数组的第一个是data ,最后一个是data

额,好好看了看,明白了,真正存储数据的数组 下标应噶是 从0到length的,不是length-1的,小甲鱼代码是对的,哥们你再看看。。。。

He2toN 发表于 2013-7-21 17:09:29

我怎么感觉小甲鱼写错了。这样的话长度就不是length了 而是length+1了{:5_99:}

He2toN 发表于 2013-7-21 17:12:00

正确的代码是不是应该这样??

/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L)。 */
/* 操作结果:在L中第i个位置之前插入新的数据元素e,L长度+1。*/

Status ListInsert(SqList *L, int i, ElemType e)
{
    int k;

    if( L->length == MAXSIZE )// 顺序线性表已经满了
    {
      return ERROR;
    }
    if( i<1 || i>L->length)   // 当i不在范围内时 ///////-------这里修改
    {
      return ERROR;
    }
    if( i < L->length )   // 若插入数据位置不在表尾 //////////-------这里也修改
    {
      /* 将要插入位置后数据元素向后移动一位 */
      for( k=L->length-1; k >= i-1; k-- )
      {
            L->data = L->data;
      }
    }

    L->data = e;// 将新元素插入
    L->length++;

    return OK;
}

晨风吹过 发表于 2013-8-15 08:33:57

像老师学习

我欲封天 发表于 2018-12-2 19:00:59

{:10_266:}感觉代码有问题

shayebudong 发表于 2021-5-11 20:31:16

我也记得小甲鱼好像说过 链表线性表都是从1开始的,不从0开始?
页: [1]
查看完整版本: 小甲鱼老师的第八讲 线性表3的代码