写双向循环链表约瑟夫环环的创建代码时编译无法进入循环

编译原理分知识点习题 代码优化_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
编译原理分知识点习题 代码优化
编​译​原​理​分​知​识​点​习​题​ ​答​案​+​详​细​解​题​步​骤
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
你可能喜欢共有 1716 人关注过本帖
标题:【求助】 数据结构约瑟夫环问题
等 级:论坛游民
帖 子:37
专家分:30
结帖率:25%
&&已结贴√
&&问题点数:20&&回复次数:4&&&
【求助】 数据结构约瑟夫环问题
我自己写的程序有好多问题&&虽然编译没事 可是我调试发现 我Creat完链表后 他没有将链表的地址返回 请大家帮忙看一下&&谢谢了
#include &stdio.h&
#include &malloc.h&
#include &string.h&
typedef struct
typedef struct LNode
&&& data D
&&& struct LNode *
}LNode,*LinkL&&//LNode == *LinkList == struct LNode
void CreatList_L(LinkList *L,int n)
&&& int i = 1;
&&& LNode *p,*q,*
&&& head = p = (LinkList)malloc(sizeof(LNode) ); //Head Node
&&& for(i = 1 ; i &= i++)
&&&&&&&&p-&Data.num =
&&&&&&&&printf(&Put int the passwd :&);
&&&&&&&&scanf(&%d&,&p-&Data.passwd);
&&&&&&&&q = (LinkList)malloc(sizeof(LNode) );
&&&&&&&&p-&next =
&&&&&&&&p = p-&
&&& p-&next = //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-&
int Delete_L(LinkList *L,int m)&&&//@param is m , return is next m.
&&& LNode *p,*q;
&&& int i = 1,m_
&&& p = L;
&&& while(i != m - 1)
&&&&&&&&p = p-&
&&&&&&&&i++;
&&& q = p-&
&&& p-&next = q-&
&&& printf(&%d &,q-&Data.num);
&&& m_new = q-&Data.
&&& free(q);
&&& return m_
int GetLen_L(LinkList L)
&&& LNode *p;
&&& int len = 1;
&&& p = L;
&&& while(p-&next != L)
&&&&&&&&len++;
void main()
&&& int n,m,
&&& 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 =
还有就是 请问我在定义函数时候&&那个*L什么时候加*什么时候不加*
问题描述:
约瑟夫(Joseph)问题的一种描述是:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码〈正整数〉,一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。
利用单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。
实现提示:
程序运行后首先要求用户指定初始报数上限值,然后读取各人的密码(小于30)。
选作内容:
在顺序存储结构上实现上述问题的操作。
输入包括两行,第一行包括报数上限值m和人数n,第二行为n个人的密码,所有数据之间由空格分隔。
输出一行,共n个整数,表示各编号人的出列顺序。各数之间由空格分隔。
Sample Input
3 1 7 2 4 8 4
Sample Output
6 1 4 7 2 3 5
[ 本帖最后由 nikobelic 于
10:50 编辑 ]
搜索更多相关主题的帖子:
等 级:论坛游民
帖 子:37
专家分:30
求助啊、、、
等 级:论坛游民
帖 子:11
专家分:30
L=creatlist_L(L,n);
等 级:论坛游民
帖 子:11
专家分:30
[ 本帖最后由 chenglovenju 于
10:44 编辑 ]
来 自:甘肃天水
等 级:侠之大者
帖 子:227
专家分:457
想直接给你贴个代码,以前写过的找不到了
版权所有,并保留所有权利。
Powered by , Processed in 0.022185 second(s), 9 queries.
Copyright&, BCCN.NET, All Rights Reserved关于约瑟夫环(C语言编译)_百度知道
关于约瑟夫环(C语言编译)
人数为零;top=line-&每个人的序号 %d%d&quot:&%d&若i=1则前驱结点【top】=头结点【head】; line=H&#47:\/
line=line-&/&#47,头结点【head】的前驱为前驱结点【top】
} }}void OutputPerson_key(){ &#47:Q和
Next=malloc(sizeof(struct Person));n为0 {
printf(&//,若i≠1切i≠n则
前驱结点【top】=后继结点【next】;定义head节点指针是为了开辟完所有节点后;/typedef用来声明结构类型structstruct Person/
}//&#47,i);
Top=H请 输 入 人 数 与 初 始 编 码;
while(1) {
if(score==num)/next=NULL;person Head=NULL;/;
Next-& InputPerson();请输入第%d个人的密码;);/
Top-& OutputPerson_key();/void InputPerson(){/ if(line==NULL)/top=NULL;=n:&
每个人对应的密码分别如下,没有任何排序输出; for(i=1;/\),line-&typedef struct Person *输出出列顺序}程序代码中;%d&/#include&lt,num=m;每个人的密码 next=NULL,&m);number););用来构成双向链表的结构{ int number,N/
score++;【对已开辟的双向循环链表的节点成员进行输出;n&;
scanf(&/%d
&key),让最后一个节点可以指向
line=line-&gt,Q-&gt,输出每个的编号与对应的密码】 i++) {
printf(&//
free(line);next)
num=line-& }}void Output_OrderOfPerson()/number=i;&#47.h&
printf(&top=T
score=1;number=i;/【开辟n个struct Person 节点;/;;n&quot,Q;请输入第%d个人的密码;
Head-&gt,Top-&top-&gt,
/next。\/%d-&next为右结点(后继结点)}; scanf(&quot,&Head-&
line-&n& Output_OrderOfPerson(),&n;输出出列顺序{ int score=1;),Tint n,并连接成循环链表】
给节点开辟内存空间;;number,m;Next的前驱结点连向Top
Next-&i&lt#include&
scanf(&Top的后继结点连向Next
Next-&/【输出密码对应的人数编号】
Q=line,构成循环链表
Head=malloc(sizeof(struct Person));/=n;/n依据密码排序出列的人分别如下;next-& printf(&%d
&n为总人数 {
{ /输出每个的编号与对应的密码
if(line==line-& for(i=1;top为左结点(前驱结点) &#47,并构成循环链表 printf(&quot。; Top=H/
printf(&next=N/将链表连接起来
Top-&&#47,Top-&next=line-&next=Head:&
} }}main(){ printf(&%d &#92,i); /number);/若i=n则前驱结点【top】的后继为头结点【head】;i++)&#47。,&Next-&;n&
printf(&key);/key);
Top=Next:\i&lt.h&top=Top
提问者采纳
如果有没有讲清楚的地方,没搞懂什么是初始编码?当然这不影响其他……Q和line,而score就相当于在数数。score是计数;也就是说Q和line是【struct Person * 】类型的:每个人对应的密码是什么意思;声明在67行,这个节点被输出然后删除。观察num的声明和赋值可以看到,而Q则是line的一个辅助指针刚刚看了约瑟夫环问题,欢迎添加追问:typedef struct Person * person,Q。对于这个程序还存在一点疑惑,但事实就是当计数器到了和这个初始编码相等时。score和num这两个是条件判断用的,在约瑟夫环问题中他们数到一个特定数字离开,num就是我们输入的初始编码。从程序里来看;而person的定义是在第6行,用于删除符合条件的节点,line所指向的是一个循环链表的头结点:person line
其他类似问题
为您推荐:
约瑟夫环的相关知识
其他1条回答
#include &stdio.h&
#include&malloc.h&
typedef struct Node
struct Node *
Node* creat(Node *L)
Node *r,*s,*w;
int flag=1,j=1;
printf(&please input the password:\n&);
while(flag)
printf(&请输入第%d个密码&,j);
scanf(&%d&,&c);
s=(Node*)malloc(sizeof(Node));
s-&data=c;
r-&next=s;
r-&next=L-&
return(w);
void game(Node *head,int m)
Node *t,*q;
printf(&出列顺序为:&);
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁循环链表解决约瑟夫环问题,有段代码不懂,有大神解释啊
[问题点数:40分]
循环链表解决约瑟夫环问题,有段代码不懂,有大神解释啊
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2014年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第四
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 约瑟夫环代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信