约瑟夫环问题

来源:互联网 发布:大数据未来发展 编辑:程序博客网 时间:2024/06/18 08:45

本人是大连理工大学学生,近期数据结构作业,是这道约瑟夫环问题。感觉自己写的还不错,索性分享交流一下。

#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<time.h>typedef int ElemType;typedef int Status;#define OVERFLOW -2#define OK 1#define ERROR 0#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define FALSE 0#define TRUE 1typedef struct LNode{   ElemType data; //代表编号结点的数据(代表人的序数)   ElemType mima;//代表密码结点的数据   struct LNode *next;//代表后一个结点的地址}LNode,*LinkList;Status InitList(LinkList &L){    L=(LinkList)malloc(sizeof(LNode));    if(!L)        return ERROR;    L->next=NULL;    return OK;}void InsertAtTail(LinkList &L,int n){    LNode *p,*rear;    int i;    L=(LinkList)malloc(sizeof(LNode));    L->next=NULL;    rear=L;    for(i=1;i<=n;i++)    {        p=(LinkList)malloc(sizeof(LNode));        printf("请输入第%d个人的序号:",i);        scanf("%d",&(p->data));        //供老师检测代码结果用        /*printf("请输入第%d个人的密码:",i)        scanf("%d",&(p->mima));        printf("\n");        */        srand((unsigned int)time(NULL));        p->mima=rand()%10+1;        printf("随机数产生的第%d个人的密码是:%d\n",i,p->mima);        p->next=NULL;        rear->next=p;        rear=p;    }    rear->next=L->next;    free(L);    L=rear->next;}void yuesefu(LinkList&L,int m,int n){    int length,i,j;    LNode *p,*q;    length=n;    j=0;    p=L;    q=L;    if(m==1)    {        for(i=1;i<n;i++)        {            q=q->next;        }        printf("第1个出列的是:1");        m=p->mima;        q->next=p->next;        free(p);        length--;        p=q->next;        j++;    }    while(length!=0)    {        for(i=1;i<m;i++)        {            q=p;            p=p->next;        }        j++;        printf("第%d个出列的是:%d\n",j,p->data);        m=p->mima;        q->next=p->next;        free(p);        length--;        p=q->next;    }}int main(){    LinkList L;    InitList(L);    int n,m;    printf("请输入人数\n");    scanf("%d",&n);    InsertAtTail(L,n);    printf("请输入出列的初始密码\n");    scanf("%d",&m);    yuesefu(L,m,n);    return 0;}

第一次写,还请各位批评指教。

2 0
原创粉丝点击