这个是利用树型结构解决约瑟夫环问题
程序如下:
#include<iostream>
#include"LinkList.h"
using namespace std;
void Creat(LinkList &y,int &n){
int a1,a2,i;
cout<<"请输入"<<n<<"个密码:"<<endl;
for(i = 1; i<=n; i++){
cin>>a1;
a2 = i;
y.Append(a1,a2);
}
}
int main(){
LinkList y;
int j,n,m;
cout<<"请输入参与人数n:"<<endl;
cin>>n;
cout<<"请输入第一个上限m:"<<endl;
cin>>m;
Creat(y,n);
y.Delete(m);
system("pause");
return 0;
头文件LinkList.h的文件如下
#ifndef _LinkLIST_
#define _LINKLIST_
//#include<iostream>
using namespace std;
struct LinkNode
{
int data, num;
LinkNode *next;
};
class LinkList
{
public:
LinkList();
bool Append(int,int);
bool Delete(int);
private:
LinkNode *tail;
} ;
/*构造函数*/
LinkList::LinkList()
{
tail = NULL;
}
/*尾部插入模板,用于输入数据的保存*/
bool LinkList::Append(int e1,int e2)
{ LinkNode *p = new LinkNode;
p->data = e1;
p->num = e2;
if (tail== NULL){
tail = p;
tail->next = tail;
}
else {
p->next = tail->next;
tail->next = p;
tail = p;
}
return true;
}
/*删除函数模板,用于保存编号、密码和删除*/
bool LinkList::Delete(int m)
{
LinkNode *p = tail,*q;
while(p != p->next){
for(int k=1;k<m;k++)
p = p->next ;
q = p->next;
p->next = q->next;
cout<<q->num<<" ";
m = q->data;
delete q;
}
cout<<p->num<<" ";
delete p;
};
#endif
就是希望可以详细点,最好每一句都有注释……我知道很麻烦,所以采纳后我至少给加30个积分,如果好,我可以加更多,100封顶。写我邮箱可以么? [email protected] 如果不方便,就直接写这儿吧……现在这儿谢过了~
是么 0.0
可是这个就是数啊……这个程序是在树型结构程序示例里面的
那哥你能帮我读么,崩管他是什么