m0_53472165 2021-04-28 23:51 采纳率: 33.3%
浏览 11

请求大佬解释一下语句

想问问代码中的加粗的部分L->node[p].next是实现什么的,initiate函数中不是已经赋值为-2了吗

 

 

typedef   struct
{
     DataType  data;
     int  next;
} Stlisttype;

typedef struct
{
    Stlisttype node[MaxSize];
    int head;
}StLick;

void ListInitiate(StLick *L)
{
  int i;
  L->head=0;
    for(i=0;i<MaxSize;i++)
    {
        L->node[i].next=-2;
    }
    L->node[L->head].next=-1;            //只有头结点的next值为-1
}

int  ListLength(StLick L)
{
    int size=0;

    int p=L.head;
    while(L.node[p].next!=-1)
    {
          p=L.node[p].next;
          size++;

    }
    return  size;
}
int  ListInsert(StLick *L,int i,DataType  x)
{
   int  k,j=-1;
   int  p=L->head;
   while (L->node[p].next!=-1&&j<i-1)
      {
          p=L->node[p].next;              //p用来指向第i-1个结点
          j++;
      }

   if(j!=i-1)
   {
        printf("\n 插入位置参数出错!");
        return 0;
    }
      for(k=0;k<MaxSize;k++)
      {
          if(L->node[k].next==-2)                   //寻找第一个可用结点
          {
              L->node[k].next=L->node[p].next;
              L->node[p].next=k;
              L->node[k].data=x;
              break;
          }
      }
      if (k==MaxSize)
        {
        printf("链表已满,无法插入!");
        return 0;
        }
      return  1;
   }
 

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2021-04-29 08:36
    关注

    如果只是初始化后就调用ListLength函数,那么你加粗这句话是不会被执行的,因为此时头的next值为-1,if条件不满足

    所以一定是调用ListInsert后,再ListLength才会执行加粗代码,此时加粗代码的p就不是-2了,在ListInsert中已经被赋值指向下一个节点的有效序号了,直到找到next为-1为止

    评论

报告相同问题?

悬赏问题

  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB