约瑟夫问题(单向链表)

it2024-12-18  12

# include "stdlib.h" # include "stdio.h" struct Node{ int data; Node *next;};int main(){ int n,k=1,m,i,s;  Node *p,*q,*head;  printf("约瑟夫问题——顺序表/n输入总人数n和退出编号m:/n"); // 输入总人数,退出编号   scanf("%d%d",&n,&m);   head=new Node;           //确定头结点  p=head; for(i=1;i<=n-1;i++)                 //赋初值 {  p->data=i;  p->next=new Node;   //为下一个新建内存  p=p->next; }  p->data=n;                 //最后一个单独处理  p->next=head;                 //指向头,形成循环链表  p=head;                   while(p->data!=(p->next)->data)            //p->data==(p->pNext)->data表示只剩下一个结点的 {  while(p->data !=k)         //寻找编号为k的结点   p=p->next;   s=1; if(m==1) {  for(i=1;i<n;i++)  {   p=p->next ;   }    printf("最后退出的是第%d位人/n",p->data);     break; }else{while(p!=p->next)            {  for(i=1;i<m-1;i++)         p=p->next;             q=p->next;          p->next=q->next;p=p->next;  delete q;  s++;    }printf("最后退出的是第%d位人/n",p->data);      delete p;} }system("Pause");return 0; }

转载于:https://www.cnblogs.com/ituff/archive/2011/03/16/2858553.html

相关资源:用单向循环链表实现约瑟夫环问题
最新回复(0)