C++单链表求解约瑟夫环

来源:互联网 发布:华为 移动数据变灰 编辑:程序博客网 时间:2024/05/17 20:25
#include<iostream>using namespace std;struct LinkNode      //链表结点类{       LinkNode(int cdate):date(cdate){}  //构造函数    int date;    LinkNode * link;};class CircList{private:    LinkNode  *first;  //链表头指针    int  n; //总人数    int m;   //报数间隔    int s;//起始位置public:    CircList(int cn,int cm,int cs):n(cn),m(cm),s(cs)   //构造函数    {        CreateList();        OutputList();    }    void CreateList();    void OutputList();    LinkNode *Locate(int i)  //寻找第i个元素,并返回地址    {        LinkNode *current=first;        int k=1;        while(k<i)        {            current=current->link;k++;        }        return current;    };};void CircList::CreateList()   //创建链表并对数据项进行赋值{    LinkNode *cur=NULL;    LinkNode *p=first=new LinkNode(1);    cur=p;    for(int i=2;i<=n;i++)    {        p=new LinkNode(i);        cur->link=p;        cur=cur->link;  //cur紧跟着p后移    }    cur->link=first;}void CircList::OutputList(){    LinkNode *p=Locate(s);    LinkNode *pre=NULL;    int i,j;    for(i=0;i<n;i++)    {        for(j=1;j<m;j++)        {            pre=p;            p=p->link;        }    cout<<"出列的人是"<<p->date<<"  "<<endl;    pre->link=p->link;    delete p;    p=pre->link;   }}int main(){    int a,b,c;    cout<<"请输入总人数,报数间隔,开始号码"<<endl;    cin>>a>>b>>c;    if(b==0||c==0)    {        cout<<"请重新输入!"<<endl;        exit(1);    }    CircList(a,b,c);    return 0;}
0 0
原创粉丝点击