循环链表实现约瑟夫问题,拉丁方阵问题
2015-10-07 10:38
363 查看
关于约瑟夫以及拉丁方阵的问题在这里就不进行描述了,详见百度就行了,下面直接上代码
链表节点的定义
初始化该循环链表
主函数部分(约瑟夫)
主函数部分(拉丁方阵)
链表节点的定义
struct Node{ int data; Node *next; }
初始化该循环链表
Node* init_list(int num){ int i=1; Node *tmp; head=new Node; head->next=NULL; tmp=head; while(i<=num){ Node * p= new Node; p->data=i++; p->next=NULL; tmp->next=p; tmp=p; } tmp->next=head->next;//这里最后一个元素的next指向头结点的next,也就是我们的第一个元素 return tmp->next; }
主函数部分(约瑟夫)
int main(){ cout<<"请输入总人数"<<endl; int num; cin>>num; cout<<"请输入间隔数"<<endl; int n; cin>>n; Node *p=init_list(num); while(p!=p->next){ for(int i=1;i<n-1;i++){//这里可以有两种做法,就是数到第N个的时候结束并且输出数据,也可以是 p=p->next;//数到N-1个,然后输出第N个元素的数据,不过第一种的话在进行删除的处理 }//会有一点麻烦,所以这里采用第二种做法 cout<<p->next->data<<" "; Node *tmp=p->next; p->next=tmp->next; p=p->next; delete(tmp); } cout<<p->data<<endl; return 0; }
主函数部分(拉丁方阵)
int main(){ cout<<"请输入方阵的大小"<<endl; int num; cin>>num; Node *p=init(num); int tmp1=num; int tmp2=num; while(tmp1--){ tmp2=num; while(tmp2--){ cout<<p->data<<" "; p=p->next; } cout<<endl; p=p->next;//每输出一行就向右移动一次 } cout<<endl; return 0; }
相关文章推荐
- Win7与ubuntu双系统开机找不到ubuntu引导项问题解决
- TCP WRAPPERS、denyhosts软件的安装和配置、PAM身份认证模块应用
- [opencv] 摄像头操作
- 分布式基础学习_分布式文件系统
- 【Linux高频命令专题(15)】more
- jquery网站左侧弹出导航菜单
- 软件测试第一阶段总结
- ubuntu12.04(64位)源码编译安装xen4.4.1及配置
- C++ map的基本操作和使用
- systemd经验
- 【Linux高频命令专题(14)】nl
- 短信拦截马黑产揭露 - 莫伸手,伸手必被抓
- HDU - 2829 Lawrence(斜率优化)
- 鸟哥linux私房菜部分命令摘录(2)
- Win10预览版10558《电话》细节:支持通话录音功能
- Java版顺序表的浅拷贝与深拷贝(二)
- 深入Java集合学习系列:ConcurrentHashMap之实现细节
- 网站运维常用小技巧,排错必备
- 统一Eclipse的编码风格
- 鸟哥linux私房菜部分命令摘录(1)