【新人】c++写了一个约瑟夫环,运行不能QAQ
#include<iostream>usingnamespacestd;structNode{intdata;Node*next;};voidJosephus(intn,...
#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
void Josephus(int n,int k,int m)
//n表示总人数,k表示第一个开始报数的人,m表示出列者喊道的数
{
Node *p=NULL;//指向当前节点
Node *r=NULL;//指向前驱节点
Node* head=NULL;//指向头结点
int i=0;
//建立循环链表
for(i=0;i<n;i++)
{
Node* p=new Node;
p->data=i;
if(head==NULL)
head=p;
else
r->next=p;
r=p;
}
p->next=head;
p=head;
//找到第一个报数的人
for(i=0;i<k;i++)
{
r=p;
p=p->next;
}//跳出循环时,p指向第一个报数的人
//循环删除报到m的人
while(p->next!=p)
{
for(i=1;i<m;i++)
{
r=p;
p=p->next;
}//跳出循环时,p指向报到m的人
r->next=p->next;
cout<<"被删除的元素:"<<p->data<<endl;
p=r->next;
}
cout<<"最后被删除的元素是"<<p->data<<endl;
}
int main()
{
int n=5;
int k=3;
int m=2;
Josephus(n,k,m);
return 0;
} 展开
using namespace std;
struct Node
{
int data;
Node *next;
};
void Josephus(int n,int k,int m)
//n表示总人数,k表示第一个开始报数的人,m表示出列者喊道的数
{
Node *p=NULL;//指向当前节点
Node *r=NULL;//指向前驱节点
Node* head=NULL;//指向头结点
int i=0;
//建立循环链表
for(i=0;i<n;i++)
{
Node* p=new Node;
p->data=i;
if(head==NULL)
head=p;
else
r->next=p;
r=p;
}
p->next=head;
p=head;
//找到第一个报数的人
for(i=0;i<k;i++)
{
r=p;
p=p->next;
}//跳出循环时,p指向第一个报数的人
//循环删除报到m的人
while(p->next!=p)
{
for(i=1;i<m;i++)
{
r=p;
p=p->next;
}//跳出循环时,p指向报到m的人
r->next=p->next;
cout<<"被删除的元素:"<<p->data<<endl;
p=r->next;
}
cout<<"最后被删除的元素是"<<p->data<<endl;
}
int main()
{
int n=5;
int k=3;
int m=2;
Josephus(n,k,m);
return 0;
} 展开
展开全部
逻辑上问题不少
建立链表的时候,
head=p;elser->next=p;r=p;这里r是null,那么next是没有的,所以先r赋值
Node* p=new Node;
p->data=0; //赋值头结点
head=p;
for(i=1;i<n;i++)
{
Node* p=new Node;
p->data=i;
head=p;
}
p->next=head; //首尾相连
//开始查找
while(p->next!=p)
{
for(i=0;i<m-1;i++)
p->next=p;
p->next=p->next->next; //删除m节点
p->next=p; //后移一个节点开始接着基数
}
思路是这样,链表那里的一些语法我记不很清楚了,可能有错误
建立链表的时候,
head=p;elser->next=p;r=p;这里r是null,那么next是没有的,所以先r赋值
Node* p=new Node;
p->data=0; //赋值头结点
head=p;
for(i=1;i<n;i++)
{
Node* p=new Node;
p->data=i;
head=p;
}
p->next=head; //首尾相连
//开始查找
while(p->next!=p)
{
for(i=0;i<m-1;i++)
p->next=p;
p->next=p->next->next; //删除m节点
p->next=p; //后移一个节点开始接着基数
}
思路是这样,链表那里的一些语法我记不很清楚了,可能有错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询