搜索
查看: 890|回复: 2
打印 上一主题 下一主题

【求助!!】写了一个jose环的程序,为什么一运行就会显示Joseph.exe已停止工作??

[复制链接]
跳转到指定楼层
楼主
发表于 2013-10-11 21:04:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
【求助!!】写了一个jose环的程序,为什么一运行就会显示Joseph.exe已停止工作??
难道是因为溢出了?

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}NODE;
struct node *CreatList(int n)//创建含有n个结点并带头结点的单链表
{
int i;
struct node *p, *q, *head;
if(n == 0)
  printf("FALSE!");
head = (struct node *)malloc(sizeof(struct node));
p = head;
q = head;
for(i = 1; i <= n; i++){
  p = (struct node *)malloc(sizeof(struct node));
  fflush(stdin);
  printf("Please input the %dth number:", i);
  scanf("%d", &p->data);
  q->next = p;
  q = p;
}
p->next = NULL;
return head;
}
int ShowList(NODE *L)/*显示链表*/
{
NODE *p;
p=L;
while(p=p->next)printf("%d\n", p->data);
return 0;
}
void joseph(int n, int s, int m)//除头结点外有n个结点,从第s个结点开始,每m个结点删除,删除n-1次
{
int i, j;
NODE *h, *p, *q, *r;
if(n < s)
  return;
h = CreatList(n);
p = h;
q = h;
for(i = 1; i < s; i++)//寻找第s-1个结点,并使q指向它
  q = q->next;
p = q->next;//使p指向第s个结点
for(i = 1; i < n; i++){//1.
  for(j = 1; j < m; j++){//2.
   if((p->next != NULL) && (q->next != NULL)){
    p = p->next;
    q = q->next;
   }
   else{
    if(p->next == NULL){
     q = q->next;
     p = h->next;
    }
    else{
     q = h->next;
     p = p->next;
    }
   }
  }//2.
  printf("%d\n", p->data);
  r = p;
  if(p->next = NULL){
   p = h->next;
   q->next = NULL;
  }
  else{
   p = p->next;
   if(q->next != NULL)
    q->next = p;
   else
    h->next = p;
  }
  free(r);
}//1.
printf("%d\n", (h->next)->data);
}
int main()
{
int n, s, m;
printf("Please input n, s and m:\n");
scanf("%d %d %d", &n, &s, &m);
joseph(n, s, m);
    getch();
    return 0;
}

沙发
发表于 2013-10-11 22:22:24 | 只看该作者
必然是某处指针操作出错了啊
板凳
发表于 2013-10-21 15:55:23 | 只看该作者
你的指针用得不好,这造成了致命的破坏!幸好是小事,要是大破坏还会导致系统死机!!!灌水帖``````
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表