链表经典问题——猴子选大王
来源:互联网 发布:影音先锋网络任务网址 编辑:程序博客网 时间:2024/05/16 13:57
n只猴子要选大王,选举方法如下:所有猴子按 1,2 ……… n 编号并按照顺序围成一圈,从第 1个猴子起,由1开始报数,报到m时,该猴子就跳出圈外,下一只猴子再次由1开始报数,如此循环,直到圈内剩下一只猴子时,这只猴子就是大王。
#include<malloc.h>#include<iostream>using namespace std;typedef struct snode{int data;struct snode *next;}lnode;void houzi(int n,int k){lnode *p,*lq,*head,*s,*pre;//p:当前结点。 head :头结点 。pre:当前结点前一个结点。head=(lnode *)malloc(sizeof(lnode));head->next=head;head->data=0;p=head;p->data=1;p->next=p;for(int i=2;i<=n;i++){lq=(lnode *)malloc(sizeof(lnode));lq->data=i;lq->next=p->next;p->next=lq;p=p->next;}p=head;pre=head;while(n!=1){for(int i=1;i<k;i++){p=p->next;cout<<p->data<<" ";}cout<<endl<<p->data<<"出局"<<endl;while(pre->next!=p)//确定删除结点的前一个节点,以便删除。pre=pre->next;pre->next=p->next;s=p;p=p->next;free(s);n--;}cout<<"最后的结点为:"<<p->data<<endl;}int main(){houzi(8,3);}
约瑟夫问题。解决方法:建立一个有n个节点,没有头结点的循环链表,确定第一个报数人的位置。不断从链表中删除节点,直到链表为空。
还需要搞定的:单链表反转,对单链表遍历一次求中间值。先记下。
- 链表经典问题——猴子选大王
- 线性表——猴子选大王问题
- 猴子选大王问题
- 猴子选大王问题
- 猴子选大王问题
- 猴子选大王问题
- 猴子选大王问题
- 猴子选大王问题——约舍夫问题
- 循环链表-约瑟夫问题-猴子选大王
- 约瑟夫问题(猴子选大王) 链表实现
- 约瑟夫问题——猴子选大王 双向指针
- 递归——实现猴子选大王的问题
- 【算法】猴子选大王问题
- 约瑟夫问题(猴子选大王)
- 猴子选大王 - 约瑟夫问题
- 循环链表---猴子选大王
- 循环链表 猴子选大王
- 链表学习之猴子选大王
- canvas元素用于在网页上绘制图形-html5Canvas
- awk
- dma使用
- 函数与函数指针
- 线程和进程的区别
- 链表经典问题——猴子选大王
- 强大的矩阵奇异值分解(SVD)及其应用
- Winform 组件EventLog
- DataTable
- 3d tableView 效果实现
- 责任链模式
- ASP.NET中防止Access数据库下载
- sql和Mongodb对应的一些语法--mongodb
- Common Visual C++ 64-bit Migration Issues