首页 > 试题广场 >

设L为单向循环链表(不带头结点)第一结点的指针,结点编号分别

[问答题]
设L为单向循环链表(不带头结点)第一结点的指针,结点编号分别为1,2,....,n,从链表中编号为k(1≤k≤n)的结点开始计数,计到m(1≤m≤n)时的结点出列(删除),再从出列的下一结点从1开始计数,计到m时的结点又出列,........,以此类推,直到表中所有的结点都出列为止。请用C语言函数形式写出完成此任务的算法:Josephu(L,n,k,m);
推荐
Typedef struct node
    {datatype data;
    struct node next:}linknode,*link;
void Josephu(link L,int n,int k,int m)
    {int i;    link p,r;    p=L;
    if(k<=n&&m<=n)
        {for(i=1;i<=k-1;i++)
          {r=p;p=p->next:}
        while(p->next!=p)
            {for(i=1;i<=m-1;i++)
             {r=p;p=p->next;}
            r->next=p->next;
            free(p);
            p=r->next;
            }
        free(p);
        }
    }

发表于 2018-07-18 20:53:47 回复(0)