鱼C论坛

 找回密码
 立即注册
查看: 1758|回复: 5

[已解决]关于约瑟夫的小问题

[复制链接]
发表于 2017-3-7 16:14:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自己编了一下约瑟夫问题,可是每次输出完就会弹出已停止工作,不知为何,求解答~
程序如下:

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
        int data;
        struct Node *next;
}NODE,*PNODE;

PNODE create();
//void traverse(PNODE);
void traverse2(PNODE);
int yue(PNODE);
//int delete_p(PNODE,int);
void delete_p2(PNODE,int);
void main()
{
       
        PNODE p=NULL;
    p=create();
    delete_p2(p,3);

         

}

PNODE create()
{
       
        PNODE pHead=(PNODE)malloc(sizeof(NODE));
    PNODE pTail=pHead;
        int len,i;
    printf("请输入人数:");
    scanf("%d",&len);
        pTail->next=NULL;

   for(i=1;i<=len;i++)
   {
           PNODE pNew=(PNODE)malloc(sizeof(NODE));
           pNew->data=i;

           pTail->next=pNew;
           pNew->next=NULL;
           pTail=pNew;

   }
  pTail->next=pHead->next;
   
   return pHead;
}


void traverse2(PNODE ps)
{
        PNODE p=ps;
        p=p->next;
   while(p!=NULL)
   {
           printf("%d ",p->data);
           p=p->next;
   }
   printf("\n");
}



void delete_p2(PNODE pHead,int pos)
{
        int num=0;
        int val,i;
   PNODE p=pHead;
   PNODE pp;

   while(p->next!=NULL){
      for(i=1;i<pos;i++)
          {
        p=p->next;
          }
      pp=p->next;
          val=p->next->data;
          p->next=p->next->next;
   
     free(pp);
   
   printf("%d\n",val);

// return val;
}
}
最佳答案
2017-3-7 17:14:25
sunmenmian 发表于 2017-3-7 16:43
好厉害  那该怎么改进阿? 我改了半天也不行...
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct Node
  4. {
  5.         int data;
  6.         struct Node *next;
  7. }NODE, *PNODE;

  8. PNODE create();
  9. //void traverse(PNODE);
  10. void traverse2(PNODE);
  11. int yue(PNODE);
  12. //int delete_p(PNODE,int);
  13. void delete_p2(PNODE, int);
  14. void main()
  15. {

  16.         PNODE p = NULL;
  17.         p = create();
  18.         delete_p2(p, 3);



  19. }

  20. PNODE create()
  21. {

  22.         PNODE pHead = (PNODE)malloc(sizeof(NODE));
  23.         PNODE pTail = pHead;
  24.         int len, i;
  25.         printf("请输入人数:");
  26.         scanf("%d", &len);
  27.         pTail->next = NULL;

  28.         for(i = 1; i <= len; i++)
  29.         {
  30.                 PNODE pNew = (PNODE)malloc(sizeof(NODE));
  31.                 pNew->data = i;

  32.                 pTail->next = pNew;
  33.                 pNew->next = NULL;
  34.                 pTail = pNew;

  35.         }
  36.         pTail->next = pHead->next;

  37.         return pHead;
  38. }


  39. void traverse2(PNODE ps)
  40. {
  41.         PNODE p = ps;
  42.         p = p->next;
  43.         while(p != NULL)
  44.         {
  45.                 printf("%d ", p->data);
  46.                 p = p->next;
  47.         }
  48.         printf("\n");
  49. }



  50. void delete_p2(PNODE pHead, int pos)
  51. {
  52.         int num = 0;
  53.         int val, i;
  54.         PNODE p = pHead;
  55.         PNODE pp;

  56.         while(p->next != p) //这里
  57.         {
  58.                 for(i = 1; i<pos; i++)
  59.                 {
  60.                         p = p->next;
  61.                 }
  62.                 pp = p->next;
  63.                 val = p->next->data;
  64.                 p->next = p->next->next;

  65.                 free(pp);

  66.                 printf("%d\n", val);

  67.                 // return val;
  68.         }

  69.         //这里
  70.         printf("%d\n", p->data);
  71.         free(p);
  72.        
  73. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-7 16:37:19 | 显示全部楼层
要学会调试
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-7 16:43:30 | 显示全部楼层

好厉害  那该怎么改进阿? 我改了半天也不行...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-7 17:14:25 | 显示全部楼层    本楼为最佳答案   
sunmenmian 发表于 2017-3-7 16:43
好厉害  那该怎么改进阿? 我改了半天也不行...
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct Node
  4. {
  5.         int data;
  6.         struct Node *next;
  7. }NODE, *PNODE;

  8. PNODE create();
  9. //void traverse(PNODE);
  10. void traverse2(PNODE);
  11. int yue(PNODE);
  12. //int delete_p(PNODE,int);
  13. void delete_p2(PNODE, int);
  14. void main()
  15. {

  16.         PNODE p = NULL;
  17.         p = create();
  18.         delete_p2(p, 3);



  19. }

  20. PNODE create()
  21. {

  22.         PNODE pHead = (PNODE)malloc(sizeof(NODE));
  23.         PNODE pTail = pHead;
  24.         int len, i;
  25.         printf("请输入人数:");
  26.         scanf("%d", &len);
  27.         pTail->next = NULL;

  28.         for(i = 1; i <= len; i++)
  29.         {
  30.                 PNODE pNew = (PNODE)malloc(sizeof(NODE));
  31.                 pNew->data = i;

  32.                 pTail->next = pNew;
  33.                 pNew->next = NULL;
  34.                 pTail = pNew;

  35.         }
  36.         pTail->next = pHead->next;

  37.         return pHead;
  38. }


  39. void traverse2(PNODE ps)
  40. {
  41.         PNODE p = ps;
  42.         p = p->next;
  43.         while(p != NULL)
  44.         {
  45.                 printf("%d ", p->data);
  46.                 p = p->next;
  47.         }
  48.         printf("\n");
  49. }



  50. void delete_p2(PNODE pHead, int pos)
  51. {
  52.         int num = 0;
  53.         int val, i;
  54.         PNODE p = pHead;
  55.         PNODE pp;

  56.         while(p->next != p) //这里
  57.         {
  58.                 for(i = 1; i<pos; i++)
  59.                 {
  60.                         p = p->next;
  61.                 }
  62.                 pp = p->next;
  63.                 val = p->next->data;
  64.                 p->next = p->next->next;

  65.                 free(pp);

  66.                 printf("%d\n", val);

  67.                 // return val;
  68.         }

  69.         //这里
  70.         printf("%d\n", p->data);
  71.         free(p);
  72.        
  73. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-7 17:38:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-7 18:09:43 | 显示全部楼层
路过看看 顶一顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 12:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表