用循环单链表实现约瑟夫环(不含头结点)
来源:互联网 发布:杭州淘宝g20怎么办 编辑:程序博客网 时间:2024/06/06 12:55
/***************************************用循环单链表实现约瑟夫环*************************************/
#include <iostream>
using namespace std;
class P
{
public:
char data;
P* next;
};
P *head;
void init()
{
head=NULL;
}
void create_tail(int n,int m,int k) //尾插法,不含头结点
{
int i;
char s;
P *link,*q;
q=NULL;
for(i=0;i<n;i++)
{
link=new P;
cout<<"请输入数据:";
cin>>s;
link->data=s;
if(i==0)
head=link;
else
q->next=link;
q=link;
}
q->next=head; //尾指针指向第一个节点
link=head;
for(i=0;i<n;i++)
{
cout<<link->data<<" ";
link=link->next;
}
cout<<endl<<"约瑟夫环为:"<<endl;
if(m==1) //如果从第一个开始
{
link=head;
for(i=0;i<n-1;i++)
link=link->next; //link指向最后一个节点
cout<<head->data<<" ";
link->next=head->next;
head=head->next;//head指向第二个节点
q=head;
}
else
{
link=head;
q=head->next;
for(i=0;i<m-2;i++)
{
link=link->next;
q=q->next;
}
cout<<q->data<<" ";
link->next=q->next;
q=q->next;
}
n=n-1;
while(n!=0)
{
for(i=0;i<k-1;i++)
{
link=link->next;
q=q->next;
}
cout<<q->data<<" ";
link->next=q->next;
q=q->next;
n--;
}
cout<<endl;
}
/********头插法没用到********************/
void create_head(int n,int m,int k) //头插法,不含头结点
{
int i;
char s;
P *link,*q;
q=NULL;
for(i=0;i<n;i++)
{
link=new P;
cout<<"请输入数据:";
cin>>s;
link->data=s;
if(i==0)
{head=link;
link->next=head; //尾指针指向第一个节点
}
else
{head=link;
link->next=q;
}
q=link;
}
link=head;
for(i=0;i<n;i++)
{
cout<<link->data<<" ";
link=link->next;
}
}
int main()
{
int n,m,k;
cout<<"请输入人数n,从第几个人开始m,循环的大小k"<<endl;
cin>>n>>m>>k;
if(n<m)
{cout<<"请从新输入m的值,要小于n"<<endl;
cin>>m;
}
init();
create_tail(n,m,k);
// create_head();
return 0;
}
#include <iostream>
using namespace std;
class P
{
public:
char data;
P* next;
};
P *head;
void init()
{
head=NULL;
}
void create_tail(int n,int m,int k) //尾插法,不含头结点
{
int i;
char s;
P *link,*q;
q=NULL;
for(i=0;i<n;i++)
{
link=new P;
cout<<"请输入数据:";
cin>>s;
link->data=s;
if(i==0)
head=link;
else
q->next=link;
q=link;
}
q->next=head; //尾指针指向第一个节点
link=head;
for(i=0;i<n;i++)
{
cout<<link->data<<" ";
link=link->next;
}
cout<<endl<<"约瑟夫环为:"<<endl;
if(m==1) //如果从第一个开始
{
link=head;
for(i=0;i<n-1;i++)
link=link->next; //link指向最后一个节点
cout<<head->data<<" ";
link->next=head->next;
head=head->next;//head指向第二个节点
q=head;
}
else
{
link=head;
q=head->next;
for(i=0;i<m-2;i++)
{
link=link->next;
q=q->next;
}
cout<<q->data<<" ";
link->next=q->next;
q=q->next;
}
n=n-1;
while(n!=0)
{
for(i=0;i<k-1;i++)
{
link=link->next;
q=q->next;
}
cout<<q->data<<" ";
link->next=q->next;
q=q->next;
n--;
}
cout<<endl;
}
/********头插法没用到********************/
void create_head(int n,int m,int k) //头插法,不含头结点
{
int i;
char s;
P *link,*q;
q=NULL;
for(i=0;i<n;i++)
{
link=new P;
cout<<"请输入数据:";
cin>>s;
link->data=s;
if(i==0)
{head=link;
link->next=head; //尾指针指向第一个节点
}
else
{head=link;
link->next=q;
}
q=link;
}
link=head;
for(i=0;i<n;i++)
{
cout<<link->data<<" ";
link=link->next;
}
}
int main()
{
int n,m,k;
cout<<"请输入人数n,从第几个人开始m,循环的大小k"<<endl;
cin>>n>>m>>k;
if(n<m)
{cout<<"请从新输入m的值,要小于n"<<endl;
cin>>m;
}
init();
create_tail(n,m,k);
// create_head();
return 0;
}
- 用循环单链表实现约瑟夫环(不含头结点)
- 循环单链表实现约瑟夫环
- 约瑟夫环(约瑟夫问题) 采用循环单链表实现
- 用循环单链表实现约瑟夫环(c语言)
- 约瑟夫环程序C++循环单链表实现
- java循环单链表实现约瑟夫环问题
- 采用循环单链表实现约瑟夫环
- 循环单链表实现约瑟夫环问题
- Josephus(约瑟夫环问题)循环单链表c语句实现!
- 约瑟夫环问题(循环单链表的实现)
- 【C++】用循环链表实现约瑟夫环
- 用单向循环链表实现约瑟夫环
- 数据结构练习题 约瑟夫环—用循环链表实现
- 约瑟夫环_循环单链表
- 约瑟夫环的循环链表实现
- 循环链表实现约瑟夫环
- 循环链表实现约瑟夫环
- 循环链表实现 约瑟夫环
- 利用树实现霍夫曼编码
- java实现几种排序算法, 排序原来也挺有意思啊
- Adapter模式
- JAXB注解使用
- 第十篇 黑马程序员-IO输入输出流
- 用循环单链表实现约瑟夫环(不含头结点)
- ResponsiveSlides.js 使用
- C++的坑真的多吗?
- windows + visual studio 2010 配置SVN
- Bridge模式
- 程序员练级之路
- 【微软谷歌面试100题--【45】一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- java序列化深度克隆
- nyoj 6 喷水装置(一)