主题:求调教这程序(链表排序),他无限输出,
code=c]
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
typedef struct student
{
int mum;
char name[20];
int age;
char sex[5];//w and M
// int birthday[2];
// char address[50];
// int photo;
// char Email[20];
struct student *next;
}st;
int n;
//创建+输入
st *creat(void)
{
void scan(st *q);
st *head;
st *p1,*p2;
n=0;
p1=p2=(st *)malloc(sizeof(st));
scan(p1);
head=NULL;
while(p1->mum!=0)
{
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(st *)malloc(sizeof(st));
scan(p1);
}
p2->next=NULL;
return(head);
}
void scan(st *q)
{
printf("请输入学号\n");
scanf("%d",&(*q).mum);
fflush(stdin);
if(q->mum!=0)
{
printf("请输入姓名\n");
scanf("%s",(*q).name);
fflush(stdin);
printf("请输入年龄\n");
scanf("%d",&(*q).age);
fflush(stdin);
printf("请输入性别\n");
scanf("%s",(*q).sex);
fflush(stdin);
/* printf("请输入出生年月(年-月-日)");
scanf("%d-%d-%d",(*q).birthday[0],(*q).birthday[1],(*q).birthday[2]);
printf("请输入家庭住址");
scanf("%f",(*q).address);
printf("请输入电话号码");
scanf("%d",(*q).photo);
printf("请输入E-mail");
scanf("%f",(*q).Email); */
}
}
//排序
st *paixu_mum(st *head)
{
int i=0;
st *p,*q,*t,*hl;
hl=head->next;
hl->next=NULL;
while(hl!=NULL)
{
t=hl;
hl=hl->next;
p=head;
q=head;
while((t->mum>p->mum)&&(p->next!=NULL))//位置不对时
{
q=p;
p=p->next;
}
if(t->mum<=q->mum)//找到位置
{
if(head==p)head=t;
else q->next=t;
t->next=p;
}
else
{
p->next=t;
t->next=NULL;
}
}
}
//输出
void print(st *m)
{
printf( "%4d %4s %2d %2s\n",(*m).mum,(*m).name,(*m).age,(*m).sex);
}
void print1(st *head)
{
st *k;
k=head;
printf("mum name age sex\n");
if(head!=NULL)
do
{
print(k);
k=k->next;
}while(k!=NULL);
}
int main()
{
st *head;
int m;
head=creat();
print1(head);
// charu(head);
// print1(head);
// del(head);
// print1(head);
// check_mum(head);
paixu_mum(head);
print1(head);
}
主要是排序函数其他的都弄好,运行后编译无错但是无限输出,求高手帮看看,我搞了昨天一天了都没弄好
[[/code]
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
typedef struct student
{
int mum;
char name[20];
int age;
char sex[5];//w and M
// int birthday[2];
// char address[50];
// int photo;
// char Email[20];
struct student *next;
}st;
int n;
//创建+输入
st *creat(void)
{
void scan(st *q);
st *head;
st *p1,*p2;
n=0;
p1=p2=(st *)malloc(sizeof(st));
scan(p1);
head=NULL;
while(p1->mum!=0)
{
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(st *)malloc(sizeof(st));
scan(p1);
}
p2->next=NULL;
return(head);
}
void scan(st *q)
{
printf("请输入学号\n");
scanf("%d",&(*q).mum);
fflush(stdin);
if(q->mum!=0)
{
printf("请输入姓名\n");
scanf("%s",(*q).name);
fflush(stdin);
printf("请输入年龄\n");
scanf("%d",&(*q).age);
fflush(stdin);
printf("请输入性别\n");
scanf("%s",(*q).sex);
fflush(stdin);
/* printf("请输入出生年月(年-月-日)");
scanf("%d-%d-%d",(*q).birthday[0],(*q).birthday[1],(*q).birthday[2]);
printf("请输入家庭住址");
scanf("%f",(*q).address);
printf("请输入电话号码");
scanf("%d",(*q).photo);
printf("请输入E-mail");
scanf("%f",(*q).Email); */
}
}
//排序
st *paixu_mum(st *head)
{
int i=0;
st *p,*q,*t,*hl;
hl=head->next;
hl->next=NULL;
while(hl!=NULL)
{
t=hl;
hl=hl->next;
p=head;
q=head;
while((t->mum>p->mum)&&(p->next!=NULL))//位置不对时
{
q=p;
p=p->next;
}
if(t->mum<=q->mum)//找到位置
{
if(head==p)head=t;
else q->next=t;
t->next=p;
}
else
{
p->next=t;
t->next=NULL;
}
}
}
//输出
void print(st *m)
{
printf( "%4d %4s %2d %2s\n",(*m).mum,(*m).name,(*m).age,(*m).sex);
}
void print1(st *head)
{
st *k;
k=head;
printf("mum name age sex\n");
if(head!=NULL)
do
{
print(k);
k=k->next;
}while(k!=NULL);
}
int main()
{
st *head;
int m;
head=creat();
print1(head);
// charu(head);
// print1(head);
// del(head);
// print1(head);
// check_mum(head);
paixu_mum(head);
print1(head);
}
主要是排序函数其他的都弄好,运行后编译无错但是无限输出,求高手帮看看,我搞了昨天一天了都没弄好
[[/code]