for(j=1;j<=MAXNUM;j++)
{printf("\n请输入第 %d 个结点的密码 = ",j);
scanf("%d",&c);
StList[j].Next=j+1; // 这里错了,越界了。看上面是 for(j=1;j<=MAXNUM;j++)        StList[j].Number=j;
    StList[j].Cipher=c;
}

解决方案 »

  1.   

    数组的定义是  Stlisttype StList[MAXNUM+1];上限是  MAXNUM怎么会错???
      

  2.   

    ren20,不好意思。我没有仔细看。我又调了一下,发现了另外两个比较明显的错误。在DeleteOrder函数中,变量k的初值不能设为0,因为StList[0].Next = 0;所以下面的for循环根本没有用处;第二个地方是while的条件判断不对。while((n++)==MAXNUM);你的意思应该不是这样的吧!呵呵。在往下,我不知道怎么测了。因为我忘了约瑟夫环问题的表述。呵呵。      
      
      

  3.   

    for(m=1;m<=i-1;m++)  
      k=StList[k].Next;
    是什么意思呀?k初值为0,StList[0].Next也为0,0 = 0,转了半天在干什么啊?
      

  4.   

    非常感谢RedFire  朋友的帮助,
    我改了3处:
    1. /* 设置已用静态循环链表初值 */
    StList[0].Next=1;2.        while((n++)<MAXNUM);3.    删掉  printf("%d",StList[StList[j].Next].Number);还有,我前面提到的测试例子应为:当初始i=20时,7个人的密码依次为:  3,1,7,2,4,8,4                    出列顺序为:  6,1,4,7,2,3,5
          
      

  5.   

    感谢各位的帮助,给分了。
    我希望和RedFire交朋友,盼来信。   [email protected] Oicq :   6550801