约瑟夫环

数组实现链表:

#include<stdio.h> #include<stdlib.h> #define N 8 #define M 5 int item[N]; int next[N]; void init() { int i; for(i=0;i<N;i++) { item[i]=i; next[i]=i+1; } //设置循环 next[N-1]=0; } void printArray(int index) { int head = index; do{ printf("%d->",item[index]); index=next[index]; }while(index!=head); printf("\n"); } int main() { init(); int only=0; int i=1; printArray(only); while(only!=next[only]) { for(i=1;i<M-1;i++) only=next[only]; printf("out %d \n",item[next[only]]); next[only]=next[next[only]]; only=next[only]; printArray(only); } return 0; }

指针链表:

#include<stdio.h> #include<stdlib.h> struct Node { int item; struct Node* next; }; void printList(struct Node* h) { struct Node* x=h; do { printf("%d->",x->item); x=x->next; }while(x!=h); printf("\n"); } int main(int argc,char* argv[]) { int i=0; if(argc!=3) exit(0); int N=atoi(argv[1]); int M=atoi(argv[2]); //初始化第一个元素 struct Node* t = (struct Node*)malloc(sizeof(struct Node*)); t->item=0; t->next=t; struct Node* head = t; //初始化剩余元素 for(i=1;i<N;i++) { struct Node* n = (struct Node*)malloc(sizeof(struct Node*)); n->item=i; n->next=head; t->next=n; t=n; } printList(head); struct Node* x=head; //yuesefu while(x != x->next) { int i; for(i=1;i<M-1;i++) x=x->next; struct Node* del=x->next; x->next=del->next; x=x->next; printf("out %d\n",del->item); free(del); printList(x); } }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值