有个队友突然找我说数据结构实验没法过了,以前我的代码好像也丢了(心疼.
正好有空撸一个约瑟夫环
还只能用C/C++.已经好手疏了...请指正.
删除结点那里...因为是循环单向链表..删除本结点就要让找到前驱结点连接到后续结点,比较不方便..
#include<iostream>
#include<malloc.h>
using namespace std;
struct node {
int no; //代表编号结点的数据
int code;//代表密码结点的数据
node *next;//代表后一个结点的地址
};
int main() {
int m,n,i,j;
node *p,*q,*first;
cout<<"请输入m的初始值 m:";
cin>>m;
cout<<"请输入人数 n:";
cin>>n;
for(i=1;i<=n;i++){
if(i==1){
first=p=(node*)malloc(sizeof(node));
if(p==NULL)
return 0;
} else{
q=(node*)malloc(sizeof(node));
if(q==NULL)
return 0;
p->next=q;
p=q;
}
cout<<"请输入第 "<<i<<" 个人的密码: ";
cin>>(p->code);
p->no=i;
}
p->next=first; //让表尾指向表头形成循环链表
p=first;
cout<<"出列顺序为: ";
for (j=1;j<=n;j++){
for(i=1;i<m;i++,p=p->next);
m=p->code;
cout<<p->no<<" ";
p->no=p->next->no;
p->code=p->next->code;
q=p->next;
p->next=p->next->next;
free(q);
}
cout<<endl;
system("pause");
return 0;
}
最后,荆轲刺秦王.