约瑟夫环实验报告
班级:计算机 092 学号:0908140828 姓名:王仰仰
1. 实验题目
约瑟夫环问题
2.数据类型
typedef struct LNode{
int data;
struct LNode *next;
//数据域
//指针域
}LNode;
typedef LNode *LinkList;
2. 算法描述
伪代码算法描述:
1. 初始化单链表
2. 单链表中删除
3. 约瑟夫环
for(k=0 ; L->next!=L ;){
1.遇到出圈的人则删除
2.判断 p 是否是尾节点,如果是,则跳过
}
算法描述:
void CreateList (LinkList &L,int n){
// 逆序创建表,把序号放入 data 中
L = new LNode;
L->next=L;
int i;
LNode *p;
for(i=1;idata = i;
p ->next = L->next;
L ->next = p;
}
}//CreateList
void ListDelete(LNode *r,
int &e){
LNode *p,*q;
p = r;
q = p ->next; //q 指向被删除结点
e = q->data; //取出删除结点的 data
p ->next = q ->next;
delete q;
}
void yuesefu(int n,int m){
int num,k;
LinkList L;
LNode *p,*q;
CreateList( L , n);
p=L;
q=L->next;
for(k=0 ; L->next!=L ;){
k++;
if(k==m){
q=q->next;
ListDelete(p,num);
cout<next==L) p=L;
q= p->next;
}
L = new LNode;
L->next=L;
int i;
LNode *p;
for(i=1;idata = i;
p ->next = L->next;
L ->next = p;
}
}//CreateList
//判断 p 是否是尾节点,如果是,则跳过
}
4.程序清单
#include
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
//数据域
//指针域
}LNode;
typedef LNode *LinkList;
void CreateList (LinkList &L,int n){
// 逆序创建表,把序号放入 data 中
}
}
void yuesefu(int n,int m){
int num,k;
LinkList L;
LNode *p,*q;
CreateList( L , n);
p=L;
q=L->next;
for(k=0 ; L->next!=L ;){
k++;
if(k==m){
q=q->next;
ListDelete(p,num);
cout<
next==L) p=L;
q= p->next;
}
void ListDelete(LNode *r,
int &e){
LNode *p,*q;
p = r;
q = p ->next; //q 指向被删除结点
e = q->data; //取出删除结点的 data
p ->next = q ->next;
delete q;
//判断 p 是否是尾节点,如果是,则跳过
void main(){
int n,m;
cout<<"输入总人数:"<>n;
cout<<"输入出圈的人:"<>m;
cout<<"出圈的顺序:"<