循環鏈表的應用——約瑟夫環
阿新 • • 發佈:2017-08-14
hide creat rip urn nes scan hid fadein repr
題目:
報數,共n個人 從1編號,依次報號,報到m出隊,再接著從下一個人開始數,依次輸出出隊的人。
#include<stdio.h>
#include<stdlib.h>
typedef struct n
{
int data;
struct n* next;
}node;
node* creat(int n)//創建n個節點的鏈表
{
int i=0;
node* q = NULL;
node* p = (node*)malloc(sizeof(node));
p->data = 1;//1是編號
node* head = p;
/////////////////////////////////
for(i=1;i<n;i++)
{
q = (node*)malloc(sizeof(node));//q是當前最後一個節點
q->data = i+1;
p->next = q;//p是q的前一個節點
p=q;
}
p->next = head;
return head;
}
////刪除報號為m的//////////////////
void delte(int m,node* head)
{
int i;
node* p;
node* q;
node* temp;
p = head;
while (p->next!=p)
{
for(i=1;i<m;i++)
{
q=p;
p = p->next;
}
//刪除節點
printf("%d ",p->data);
temp = p;
q->next = p->next;
p = p->next;
free(temp);//中間變量temp就是用來釋放空間的
}
printf("%d\n",p->data);
}
int main()
{
int n,m;
node* l;
scanf("%d%d",&n,&m);
l = creat(n);
delte(m,l);
}
循環鏈表的應用——約瑟夫環