约瑟夫环问题 链表实现
2011-01-02 16:11
447 查看
#include<stdio.h> #include<assert.h> #include<malloc.h> #define NUM 10 struct node{ int num; struct node *next; }; struct node * joy; struct node * init() { struct node *head=(struct node *)(malloc(sizeof(struct node))); assert(head); struct node *p=NULL; struct node *pPre=head; struct node *pHead=head; int i; pPre->next=NULL; for(i=1;i<NUM;i++) { if((p=(struct node *)malloc(sizeof(struct node)))!=NULL) { p->num=i; pPre->next=p; pPre=p; } } while(pHead) { printf("%d/n",pHead->num); pHead=pHead->next; } pPre->next=head; joy=head; return head; } int main(int argc,char *args[]) { int start=2; int overnum=3; struct node *pCur; struct node *pPar; int i; int j; //init(); pCur=init(); //printf("%d/n",pCur->num); for(i=1;i<start;i++) { pCur=pCur->next; } //printf("%d/n",pCur->num); while(pCur->next!=pCur) { //printf("%d----------/n",pCur->num); for(j=0;j<overnum;j++) { pPar=pCur; pCur=pCur->next; } printf("%d/n",pCur->num); pPar->next=pCur->next; free(pCur); pCur=NULL; if(pPar!=NULL) pCur=pPar->next; } return 0; }
起初调试无法输出,发现是初始化链表根本就没连接起来,后来总报double free的错误,把链表的循环从while(pCur!=NULL)改为while(pCur->next!=pCur),错误解决。另外数组实现的话注意两点:1,利用取余循环 2,数组大小每次减1
相关文章推荐
- 用java实现链表并解决约瑟夫环问题
- 用数组和链表实现约瑟夫环问题
- 单链表---实现约瑟夫环的问题
- 约瑟夫环问题(丢手帕游戏)Java 链表实现
- 约瑟夫环问题的链表实现
- 约瑟夫环问题的两种实现[链表+数组]
- 链表实现约瑟夫环问题
- 循环链表 CircleList的实现并解决约瑟夫环问题
- 【c++】约瑟夫环问题的链表实现
- 单链表实现猴子选大王(约瑟夫环问题)
- 循环链表 约瑟夫环问题实现
- PHP实现的基于单向链表解决约瑟夫环问题示例
- Java语言解决约瑟夫环问题(链表实现)
- 约瑟夫环问题(不带头结点单循环链表实现和数组实现)
- 自己实现集合框架(五):利用单链表解决约瑟夫环问题
- 链表实现约瑟夫环问题
- 使用链表实现环结构以解决约瑟夫环问题
- 链表经典问题:约瑟夫环的实现
- PHP实现单向链表解决约瑟夫环问题
- java实现约瑟夫环问题