| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2018 人关注过本帖
标题:约瑟夫环
取消只看楼主 加入收藏
cczxsong
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2017-1-12
结帖率:0
收藏
 问题点数:0 回复次数:0 
约瑟夫环
#include <stdio.h>  
#include <stdlib.h>  

#define OK      1  
#define ERROR   0  
#define TRUE    1  
#define FALSE   0  
 
typedef struct LNode{  
   int     num ;  //序号
   int     code;  //密码         
   LNode *next;                  
}LNode, *LinkList;

/**********************************/
//建立新的单循环链表,并输入各个节点的值
int createList(LinkList &L,int n)
{

    if(n<=0)return ERROR;
   
    LinkList tail,s;
    L=(LinkList)malloc(sizeof(LNode));//首节点
    L->num=1;
    scanf("%d ",&L->code);
    tail=L;
    for(int i=2;i<=n;++i){
        s=(LinkList)malloc(sizeof(LNode));
        s->num=i;
        scanf("%d",&s->code);
        s->next=NULL;
        tail->next=s;
        tail=s;
    }
    tail->next=L;
    return OK;
}
/****************************/
// 从已有的链表中删除指定的num值的节点
int deletList(LinkList &L,int i){
    LinkList e=L,r;

    while(e->next->num!=i){
        e=e->next;
    }
    if(e->next->num==i){
        r=e->next;
        e->next=r->next;
     //  L=e->next;
        free(r);
        return OK;
    }
    else return ERROR;   
}


/*****************************/
//具体操作步骤
void  printResurt(LinkList &L,int m,int n){
    LinkList p=L,q;
    int temp=m;
    for(int i=0;i<n;i++){
        for(int j=1;j<temp;j++){
            p=p->next;
        }
        printf("%d ",p->num);
        q=p->next;  
        temp=p->code;
        deletList(L,p->num);//删掉p节点
        p=q;
    }
}

/***************************/
//输出链表中的所有数据
void DispList(LinkList &L){
    LinkList p=L;
    while(p!=NULL){
        printf("%d  ",p->code);
        p=p->next;
    }
    printf("\n");
}
/************************************/
//主函数
int main(){
    int m=0,n=0;
    LinkList L;
    printf("请输入指定初始报数上限值:");
    scanf("%d",&m);
    printf("请输入人数:");
    scanf("%d",&n);
//    L=(LinkList)malloc(sizeof(LNode));
    printf("请依次输入每个人的密码:");
    createList(L,n);
//    deletList(L,4);
//    deletList(L,1);
//    DispList(L);
    printResurt(L,m,n);
    return 0;
}

不知道错到哪里了,他删除第一个节点就会出错
搜索更多相关主题的帖子: int num code next printf 
2017-10-04 17:29
快速回复:约瑟夫环
数据加载中...
 
   



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

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