猴子选大王c语言循环链表实现,猴子选大王循环链表实现.doc

猴子选大王循环链表实现

C++

n只猴子围成一圈,顺时针方向从1到n编号。之后从1号开始没顺时针方向让猴子从1,2,...,m依次报数,凡是报到m的猴子,就让其出圈,取消候选资格。然后不停地按顺时针方向逐一让报到m者出圈,是的剩下的一个就是猴王。 #include? using?namespace?std; struct?monkey???????????????//结构声明 { int?num;????????????????//整型数,用于记录猴子号 monkey?*next;????????????//monkey结构指针 }; monkey?*head,*tail;?????????//monkey结构指针,全局变量 void?creat(int?nn)?????????//被调用函数 {??????????????????????????//函数体开始 int?i;?????????????????//整型变量i,用于计数???????? monkey?*p,*q;??????????//声明monkey结构指针p,q p=new?monkey;??????????//为p分配内存空间 p->num=1;??????????????//初始化p结点num域为1 p->next=NULL;??????????//初始化p结点next域为空 head=p;????????????????//链表头指针head赋值为p q=p;????????????????????//q赋值为p for(i=2;i<=nn;i=i+1)?????//利用循环结构构造链表 { ??p=new?monkey;??????//为p配内存空间 ??p->num=i;??????????//初始化p结点num域为i,表示猴子号 ?????q->next=p;?????????//将p点加到链表尾部 ??q=p;????????????????//让指向链表尾部结点 ??p->next=NULL;???????//链表尾部指向空 } tail=q;??????????????//链表尾 tail->next=head;?????//链表尾部指向链表头,形成循环链表 } //被调用函数select,mm表示结点删除间隔 void?select(int?mm) {???????????????????????//函数体开始 int?x=0;????????????//声明整型值x,并初始化为0 monkey?*p,*q;???????//声明指针变量p,q q=tail;?????????????//q赋值给tail,指向循环链表尾部 do??????????????????//直到型循环,用于循环删除指定间隔的结点 { ??p=q->next;?????//p赋值给相邻的下一个结点 ??x=x+1;?????????//x加1 ??if(x%mm==0)????//x是否整除mm ??{ ???cout<num<next=p->next;???????//删除此结点 ???delete?p;????????????//释放空间 ???p=NULL; ??} ??else ???q=p;??????????????//q指向相邻的下一个结点p }while(q!=q->next);???????//剩余结点数不为1,则继续循环 head=q;???????????????????//head指向结点q,q为链表中剩余的一个结点 }??????????????????????????????//函数体结束 int?main()????????????????????//函数体开始 { int?n,m;?????????????????//声明整型变量n,m head=NULL;???????????????//初始化head为空 cout<>n;??????????????????//输入待插入结点的数据 cout<>m;??????????????????//输入间隔 creat(n);????????????????//调用函数creat建立循环链表 ????select(m);???????????????//调用函数select,找出剩下的猴子 cout<num<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值