#include<stdio.h> #include<stdlib.h> struct stu{//ID用来保存序号 int ID; struct stu* next; }; struct stu*creat(struct stu *pHead,int n)//创建一个具有n个节点的循环链表 { struct stu *pNew,*pEnd; int i=1; pHead=(struct stu *)malloc(sizeof(struct stu)); pHead->ID=1; pEnd=pHead; for(i=2;i<=n;i++) { pNew=(struct stu *)malloc(sizeof(struct stu)); pNew->ID=i; pEnd->next=pNew; pEnd=pNew; } pEnd->next=pHead; return pHead; } void dis(struct stu*pHead)//显示链表 { struct stu* p=pHead; int i=0; while(p->next!=pHead) { printf("%d ",p->ID); p=p->next; i++; if(i%5==0) printf("\n"); } printf("%d\n",p->ID); } struct stu* del(struct stu* p)//删除传入节点的下一个节点 { struct stu* temp=p->next; printf("%d ",p->next->ID); p->next=p->next->next; free(temp->next); return p->next; } int main() { int num,place,i,j; printf("请输入有多少人,出列位置(>=2)"); scanf("%d %d",&num,&place); struct stu*pHead,*p; pHead=(struct stu*)malloc(sizeof(struct stu)); pHead=creat(pHead,num); dis(pHead); p=pHead; printf("删除\n"); for(i=1;i<=num;i++) { for(j=2;j<place;j++) { p=p->next; } p=del(p); if(i%5==0) printf("\n"); } }
用链表实现约瑟夫环
猜你喜欢
转载自blog.csdn.net/m0_37687058/article/details/71124677
今日推荐
周排行