C语言链表的一个排序问题

2025-05-23 18:21:03
推荐回答(1个)
回答1:

排序代码不对
p2->pNext=p1->pNext;
p1->pNext->pNext=p1->pNext;
p1=p2->pNext->pNext;
不知道你在写些什么,前面两句的意思都是一样的。

下面是修改后的代码:
#include
#include
#include
#include
#include

struct student
{

char Number[10];
char Name[10];
int Cc;//Computer Architecture 计算机结构
int Os;//operating system 操作系统
int Se;//Software Engineering 软件工程
int Sum;//总分
};
struct LinkList
{
struct student User;

LinkList *pNext;
};
int Users=0; //学生个数
//上面是我定义的结构还有链表,下面是我在主函数里需要调用的排序函数
LinkList *com(LinkList *pHead)//按成绩排序
{
LinkList *pFore=NULL, *p1, *p2,*pTemp;
int i,j;
for(i=0;i for(pFore=p1=pHead,j=0;jpNext!=NULL;pFore=p1,p1=p1->pNext,j++){

if(p1->User.SumpNext->User.Sum) {
p2=p1->pNext;
pTemp=p1->pNext->pNext;
if(p1!=pHead)
pFore->pNext=p2;
else
pHead=p2;
p2->pNext=p1;
p1->pNext=pTemp;
p1=p2;
}

}
printf("排序成功");
return pHead;
}
//我没看懂这个程序,也不知道是对还是错~~~望高手指点.

//创建链表
LinkList *Create(void)
{
LinkList *headp;
LinkList *p1,*p2;
char ch;

headp=NULL;

do{
p1=new LinkList;
printf("Input message :\n");
scanf("%s%s%d%d%d",p1->User.Number,p1->User.Name,&p1->User.Cc,
&p1->User.Os,&p1->User.Se);
p1->User.Sum=p1->User.Cc+p1->User.Os+p1->User.Se;
Users++;
p1->pNext=NULL;
if(headp==NULL)
p2=headp=p1;
else {
p2->pNext=p1;
p2=p1;
}
printf("go on(Y/N):");
while(isspace(ch=getchar()));
}while(ch!='N'&&ch!='n');
return headp;
}

//输出排序后的信息
void Output(LinkList *head)
{
LinkList *p1,*p2;
int i;

for(p1=head;p1!=NULL;p1=p1->pNext){
printf("number: %s\n",p1->User.Number);
printf(" name : %s\n",p1->User.Name);
printf("Computer Architecture:%4d operating system:%4d Software Engineering:%4d\n",
p1->User.Cc,p1->User.Os,p1->User.Se);
printf("total%5d\n",p1->User.Sum);
}
}

void main()
{
LinkList *HEAD;

HEAD=NULL;
HEAD=Create();
HEAD=com(HEAD);
Output(HEAD);
}