约瑟夫环的错误,C语言

来源:百度知道 编辑:UC知道 时间:2024/07/07 01:31:03
#include<stdio.h>
#include<malloc.h>
void sort_delete(int a, int b)
{
int count,code,pos,i=1;
struct LNode{
int data;
struct LNode *next;
}
Node,*LinkList;//说明后面要用到这两个东西,一个是节点,另一个是指向这种节点的指针,都是泛指,没有分配空间
struct LNode *p,*q,L;
p=q=(struct LNode *)malloc(sizeof(Node));
p=&L;
q->data=1;//首先建立一个 无 头节点的链表

while(i<=b)
{
p->next=(struct LNode *)malloc(sizeof(Node));
(p->next)->data=i++;
p=p->next;
if(i+1==b)p->next=q;//将链表的尾节点指向头节点
}//依次将1到n的正整数赋到链表的各个空间

code=a%b;p=q;
for(count=1;count<=b;count++)
{
pos=1;//先对pos的值初始化
while(pos<=code){p=p->next;pos++;}
q=p;
printf("%d",p->next->data);
code=p->next->data;
p=p->next->next;
q->next=p->next->next;
free(p);
}
}

void main()
{
int m,n;

1。Node 已经被分配了空间,
2。 L完全没有必要。p=&L;这行去掉!
3。赋值循环有问题
while(i<b)
{
p->next=(struct LNode *)malloc(sizeof(Node));
(p->next)->data=++i;
p=p->next;
}
p->next=q;

修改后如下:

#include<stdio.h>
#include<malloc.h>
void sort_delete(int a, int b)
{
int count,code,pos,i=1;
struct LNode{
int data;
struct LNode *next;
}
Node,*LinkList;//说明后面要用到这两个东西,一个是节点,另一个是指向这种节点的指针,都是泛指,没有分配空间
struct LNode *p,*q;
p=q=(struct LNode *)malloc(sizeof(Node));;
q->data=1;//首先建立一个 无 头节点的链表

while(1)
{
p->next=(struct LNode *)malloc(sizeof(Node));
(p->next)->data=++i;
p=p->next;
if(i==b) {p->next=q;break;}//将链表的尾节点指向头节点
}//依次将1到n的正整数赋到链表的各个空间

code=a%b;p=q;
for(count=1;count<=b;count++)
{
pos=1;//先对pos的值初始化
while(pos<code){q=p;p=p->next;