标题:循环单链表 约瑟夫环 输出问题
只看楼主
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
结帖率:96.77%
已结贴  问题点数:20 回复次数:3 
循环单链表 约瑟夫环 输出问题
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int data;
    //int code;
    struct node * next;
}LNode,*Linklist;
void create_list(Linklist L,int n)
{
    Linklist p,q;
    int i;
    q=L;
    for(i=0;i<n;i++)
    {
        p=(Linklist)malloc(sizeof(LNode));
        printf("data:\n");
        scanf("%d",&p->data);
        //printf("code:\n");
       //scanf("%d",&p->code);
        q->next=p;
        p->next=NULL;
        q=p;
    }
    q->next=L;
}
void chulie(Linklist L,int n)
{
    Linklist p=L;
    Linklist s;
    //int turn ;
    int start;
    int m=0;
    int i;
    printf("please input the first code:\n");
    scanf("%d",&start);
    putchar(10);
    if(start>n)
    {
        printf("Error!\n");
    }
    else
    {
        for(m=1;m<=n-1;m++)//我觉得是这里错了,但是总是到链表结尾的时候溢出,不知道哪里错了,大家给看下吧。。
        {
            for(i=1;i<=start-1;i++)
            {
                p=p->next;   
            }
            printf("%d\n",p->next->data);
            //start=p->next->code;
            s=p->next;
            p->next=s->next;
            free(s);
        }
        printf("%d",p->next->data);
        printf("\n");
    }
    /*if(m==n-1)
    {
        printf("剩下的是:%d",*p);
    }*/

}

void print_list(Linklist L)
{
    Linklist p;
    p=L->next;
    while(p!=L)
    {
        printf("%d \n",p->data);
        p=p->next;
    }
}
int main()
{
    Linklist L;
    int n;
    printf("input the number of the list:\n");
    scanf("%d",&n);
    L=(Linklist)malloc(sizeof(LNode));
    create_list(L,n);
    printf("\n");
    print_list(L);
    chulie(L,n);
    putchar(10);
    return 0;
}


运行结果:



搜索更多相关主题的帖子: next include 约瑟夫 
2012-11-12 17:04
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
得分:6 
https://bbs.bccn.net/viewthread.php?tid=386047&page=2 在这里发了个约瑟夫问题的实现,希望起到参考作用~
2012-11-12 17:23
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:6 
我刚从这个该死的环里跳出来,哥们你又掉进去了,2楼那个连接你进去看看,好几种解决方案,应该有帮助

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-12 23:01
a635958000
Rank: 4
等 级:业余侠客
帖 子:55
专家分:253
注 册:2012-10-26
得分:8 
你的void chulie(Linklist L,int n)函数中你想要的作用是什么啊
要是想除去一列,只需要这样就可以了

 else
    {            
            for(i=1;i<start;i++)
            {
                p=p->next;   
            }
            printf("%d\n",p->next->data);
            //start=p->next->code;
            s=p->next;
            p->next=s->next;
               free(s);
            p=L;
        for(m=1;m<=n-1;m++)
        {
        printf("%d",p->next->data);
        p=p->next;
        printf("\n");
        }
    }
    /*if(m==n-1)
    {
        printf("剩下的是:%d",*p);
    }*/

}
2012-11-13 11:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-386811-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.092799 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved