标题:【求助】 数据结构约瑟夫环问题
只看楼主
nikobelic
Rank: 2
等 级:论坛游民
帖 子:37
专家分:30
注 册:2012-5-26
结帖率:25%
已结贴  问题点数:20 回复次数:4 
【求助】 数据结构约瑟夫环问题
我自己写的程序有好多问题  虽然编译没事 可是我调试发现 我Creat完链表后 他没有将链表的地址返回 请大家帮忙看一下  谢谢了
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct
{
    int num;
    int passwd;
}data;
typedef struct LNode
{
    data Data;
    struct LNode *next;
   
}LNode,*LinkList;  //LNode == *LinkList == struct LNode

void CreatList_L(LinkList *L,int n)
{
    int i = 1;
    LNode *p,*q,*head;
    head = p = (LinkList)malloc(sizeof(LNode) ); //Head Node
    for(i = 1 ; i <= n ; i++)
    {
        p->Data.num = i;
        printf("Put int the passwd :");
        scanf("%d",&p->Data.passwd);
        q = (LinkList)malloc(sizeof(LNode) );
        p->next = q;
        p = p->next;
    }
    p->next = head; //Circle Link
}
void Print_L(LinkList L)  //Print the circle link   Use to debug
{
    LNode *p;
    p = L;
    while(p->next != L)
    {
        printf("%d : %d\n",p->Data.num,p->Data.passwd);
        p = p->next;
    }
}
int Delete_L(LinkList *L,int m)   //@param is m , return is next m.
{
    LNode *p,*q;
    int i = 1,m_new;
    p = L;
    while(i != m - 1)
    {
        p = p->next;
        i++;
    }
    q = p->next;
    p->next = q->next;
    printf("%d ",q->Data.num);
    m_new = q->Data.passwd;
    free(q);
    return m_new;
}
int GetLen_L(LinkList L)
{
    LNode *p;
    int len = 1;
    p = L;
    while(p->next != L)
    {
        len++;
    }
    return len;
}
void main()
{
    int n,m,temp;
    LinkList *L;   
   
    printf("Put in the n : ");
    scanf("%d",&n);
   
    CreatList_L(L,n); //此处L的地址为啥没被带回?
    Print_L(L);        //因为没有L的地址 所以根本无法打印出链表

    printf("Put in the m : ");
    scanf("%d",&m);
    while(GetLen_L(L) > 0)
    {
        temp = Delete_L(L,m);
        m = temp;
    }
}

还有就是 请问我在定义函数时候  那个*L什么时候加*什么时候不加*

问题描述:
约瑟夫(Joseph)问题的一种描述是:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码〈正整数〉,一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。
基本要求:
利用单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。
实现提示:
程序运行后首先要求用户指定初始报数上限值,然后读取各人的密码(小于30)。
选作内容:
在顺序存储结构上实现上述问题的操作。
Input
输入包括两行,第一行包括报数上限值m和人数n,第二行为n个人的密码,所有数据之间由空格分隔。
Output
输出一行,共n个整数,表示各编号人的出列顺序。各数之间由空格分隔。
Sample Input
20 7
3 1 7 2 4 8 4
Sample Output
6 1 4 7 2 3 5


[ 本帖最后由 nikobelic 于 2012-10-13 10:50 编辑 ]
搜索更多相关主题的帖子: 约瑟夫 include 结构 
2012-10-13 10:49
nikobelic
Rank: 2
等 级:论坛游民
帖 子:37
专家分:30
注 册:2012-5-26
得分:0 
求助啊、、、
2012-10-13 16:00
chenglovenju
Rank: 2
等 级:论坛游民
帖 子:11
专家分:30
注 册:2012-10-14
得分:7 
L=creatlist_L(L,n);
2012-10-14 01:21
chenglovenju
Rank: 2
等 级:论坛游民
帖 子:11
专家分:30
注 册:2012-10-14
得分:0 
    bu

[ 本帖最后由 chenglovenju 于 2012-10-14 10:44 编辑 ]
2012-10-14 01:24
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
得分:7 
想直接给你贴个代码,以前写过的找不到了
2012-10-15 13:21



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




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

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