|
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;
}
|
|