数据结构——8 单链表约瑟夫问题
2016-08-18 17:00
316 查看
单链表——约瑟夫问题
单链表,约瑟夫问题,打印出队顺序和最后一个出队人#include<iostream> using namespace std; struct node //node结构体,里面有一个node指针,用来指向下一个node对象 { int x; node *next; //指向什么类型的对象,就用什么类型的指针 }; node* create(int n) //创建链表,参数n表示结点的个数,返回类型是结点指针node* { node *head=new node; //建立头结点 node *p=head; //创建用于往后指的node指针 for(int i=1;i<=n;i++) { node *temp=new node; //new一个node指针 temp->x=i; p->next=temp; //将p的next指向创建的temp,把新节点连接到链表后面 p=temp; //将p指向新结点temp,即p移动到下一个节点 } p->next=head->next; //创建完成后,p->next指向头结点后的第一个结点, return head; } void display(node *head) //输出链表 { node *p; p=head->next; //p重新指向头结点后的那个结点,即for循环创建的第一个结点 if(p==NULL) cout<<"NULL List"; while(p!=NULL) //输出 { cout<<p->x<<" "; p=p->next; } cout<<endl; } int josef(node *head,int people,int n) //约瑟夫问题 { int i,j=people; //用于循环计数,j是总人数,i是报到第 node *p=head->next; //从第一个结点开始 node *temp=NULL; //临时结点变量temp node *t; //用于保存出队那个人,删除他,释放内存 if(people<=1||n<=1) //检测参数输入 { cout<<"input n error!"<<endl; exit(0) ; } while(j--) //出队人数递减 { for(i=1;i<n-1;i++) p=p->next; //找到这次while循环中需要出队的人的上一个人 temp=p->next->next; //保存出队的下一个人 cout<<"out: "<<p->next->x<<" "; //打印出队的人 t=p->next; //保存出队的人 p->next=temp; //出队后重新连接链表 p=p->next; //p向下移动,为下一次找出队人做准备 if(j) //如果不是最后一个,就删除这个出队的人,释放内存 delete t; for( i=1;i<=j;i++) //输出还剩下的人 { cout<<p->x<<" "; p=p->next; } cout<<endl; } cout<<endl; return p->x; //返回出队的那个人,上面用if(j)判断,就是不删除最后一个,这样返回才有效 } int main() { node *list; int people,n; cout<<"input the people: "; //游戏总人数 cin>>people; cout<<"input the n: "; //出队数字 cin>>n; cout<<endl; list=create(people); //建立链表 // display(list1); //输出显示建立的链表,这里是讯链表,不用输出 cout<<josef(list,people,n)<<endl; return 0; }
相关文章推荐
- 采用循环链表结构求解约瑟夫问题
- 数据结构之链表——环相关问题及解决思路汇总
- 数据结构与算法学习笔记04(约瑟夫问题)
- 数据结构与算法---约瑟夫问题
- 数据结构问题之重排链表
- 数据结构算法问题 约瑟夫问题
- 数据结构与算法——约瑟夫问题
- 数据结构与算法——迭代打开url问题(链表)
- 数据结构之链表与数组(二) -单向链表上的简单操作问题
- Java采用循环链表结构求解约瑟夫问题
- 数据结构—约瑟夫问题
- 【数据结构与算法】链表问题集锦
- 数据结构及算法 - 约瑟夫问题 - javascript
- 数据结构基础之双向链表(约瑟夫问题)
- 数据结构—Java版链表相交问题的终极解决方案
- 数据结构之约瑟夫问题
- 数据结构之循环链表的应用-约瑟夫游戏
- 数据结构简明教程5版李春葆 单链表解决 多项式相加问题
- 数据结构问题---链表运算集合
- c++笔记(5):操作符、结构体、结构数组、链表、约瑟夫问题