1. 程式人生 > >循環鏈表的應用——約瑟夫環

循環鏈表的應用——約瑟夫環

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); }

循環鏈表的應用——約瑟夫環