鱼C论坛

 找回密码
 立即注册
查看: 1889|回复: 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
好厉害  那该怎么改进阿? 我改了半天也不行...
#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 != p) //这里
        {
                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;
        }

        //这里
        printf("%d\n", p->data);
        free(p);
        
}
想知道小甲鱼最近在做啥?请访问 -> 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
好厉害  那该怎么改进阿? 我改了半天也不行...
#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 != p) //这里
        {
                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;
        }

        //这里
        printf("%d\n", p->data);
        free(p);
        
}
想知道小甲鱼最近在做啥?请访问 -> 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-11-28 00:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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