爱玩科技网
您的当前位置:首页约瑟夫环

约瑟夫环

来源:爱玩科技网
#include

#include typedefstruct data{ //定义一个结构体“data” intnum; //用于存放人的序号

intval; //用于存放密码 }typedata;

typedefstruct node{ //定义一个结构体(结点),其中包含一个数据域和一个指针域

typedata data; //结构体的嵌套 struct node *next; }listnode;

typedeflistnode *linklist; linklist head;

void main()// 进入主函数 {

intn,i,b,m,j;

linklist head=(listnode *)malloc(sizeof(listnode)); //申请一个空间(头结点 head) listnode *p,*q; //定义两个可以指向结点的指针 printf(\"输入总人数:\"); scanf(\"%d\

q=head; //用指针q指向头结点 for(j=1;j<=n;j++) //本次循环主要是将每一个人的数据(包括序号、密码)存入循环链表中 {

printf(\"请输入第%d号同学的密码:\\n\ scanf(\"%d\

printf(\"\\n\"); q->next=(listnode *)malloc(sizeof(listnode)); //将头结点的next域指向刚生成的一个结点

q=q->next;

q->data.val=b; //输入密码 q->data.num=j; //输入序号 q->next=head->next;

} //将尾结点的next域指向第一个结点,构成循环链表 printf(\"请任意输入一个数m:\"); scanf(\"%d\

if(m<=0) printf(\"输入错误\"); do{

I=1; while(I!=m)

{ //将q指针指向所要输出的结点的前一结点 q =q->next; I++;

}

}

}

p=q->next; //p指向输出结点

q->next=p->next; //将输出结点的前结点的next域指向输出结点的后结点 printf(\"num:%d\val:%d\\n\输出 m=p->data.val; //取得输出结点的密码 free(p);

while(q->next!=q); //只剩最后一个结点时结束

printf(\"num:%d\val:%d\\n\输出最后一个结点 free(q); //释放最后一个结点 free(head); //释放头结点

因篇幅问题不能全部显示,请点此查看更多更全内容