josoph.c

来自「课程实验是做的Josoph算法」· C语言 代码 · 共 100 行

C
100 行
字号
#include<stdio.h>
#include<malloc.h>
typedef int DataType;
typedef struct Josoph{
    DataType data;
    struct Josoph*next;
}JosophNode,*JosophLink;

//创建长度为n的无头结点的单循环链表
JosophLink JosophLink_creat(int n)
{
    JosophLink head,move,temporary;
    int i=1;

    for(i=1;i<=n;i++)
    {
        temporary=(JosophLink)malloc(sizeof(JosophNode));
        temporary->data=i;

        if(i==1)
        {
            head=temporary;
            move=head;
        }
        else
        {
            move->next=temporary;
            move=move->next;
        }
    }

     move->next=head;
     return head;
}

//找出符合条件的结点输出其值,并删除节点


void JosophLink_del(JosophLink L,int linklength,int k)
{
     JosophLink move,temp;
     int i=1;
     move=L;


     while(linklength>1)
     {
        if(i%k==k-1)
        {
             temp=move->next;
             move->next=temp->next;
             move=move->next;
             i+=2;
             linklength--;
             printf("%5d",temp->data);


        }
        else
        {
            move=move->next;
            i++;
        }
     }
        printf("%5d",move->data);
}


void LinkedListTraverse(JosophLink L,int n)
 {
    int i=1;
    JosophLink outlink;
    outlink=L;
    while(outlink&&i<=n)
    {
        printf("%5d",outlink->data);
        outlink=outlink->next;
        i++;
    }
 }


void main()
{
    JosophLink header;
    int n,k;
    printf("PLease input a integer N:");
    scanf("%d",&n);
    printf("please inpur ai integer less than N:");
    scanf("%d",&k);
    printf("Normal Josoph:");
    header=JosophLink_creat(n);
    LinkedListTraverse(header,n);
    printf("\n");
    printf("NeW Josoph:");
    JosophLink_del(header,n,k);
    printf("\n");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?