请 高手 帮我看看 这个排序 错误在哪里?
//为了更好的找到 错误,经过 很大的简化# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Node//节点
{
int data;
struct Node *Pnext;
}Node,*PNode;
PNode create_list(void);//输入n长度,分配节点...........反复检查,该函数无误
void traverse_list(PNode Phead);//全部输出..............反复检查,该函数无误
int changdu(PNode Phead);//计算长度.....................反复检查,该函数无误
void paixu(PNode Phead);//排序(从小到大)..........................不知道 问题出在哪里?排序后的输出 结果,与没排序前 一样
int main ()
{
PNode Phead = (PNode)malloc(sizeof(Node));//创建一个头节点
Phead = create_list();//创建的过程,连 数据一起输入了
traverse_list(Phead);//输出一次检查看
paixu(Phead);//经过排序处理
traverse_list(Phead);//在输出一次 检查......发现这个排序 没效果..
return 0;
}
PNode create_list(void)
{
int len;//节点长度
printf("请输入你要分配的节点个数\n");
scanf("%d",&len);
PNode Phead = (PNode)malloc(sizeof(Node));//头节点
if(Phead == NULL)
{
printf("分配失败\n");
exit(-1);
}
PNode Ptail = (PNode)malloc(sizeof(Node));//当做 移动的尾节点
if(Ptail == NULL)
{
printf("分配失败\n");
exit(-1);
}
Ptail = Phead;//将头节点放入 移动的尾节点
Ptail->Pnext = NULL;
int i;
int val;//暂时存放 输入值data
for(i=1;i<=len;i++)
{
printf("输入信息\n");
scanf("%d",&val);
PNode Pnew = (PNode)malloc(sizeof(Node));//创建一个新的节点
if(Pnew == NULL)
{
printf("分配失败\n");
exit(-1);
}
Pnew->data = val;//将数据 放进 新节点内容区
Ptail->Pnext = Pnew;//让 移动的位节点 指向新节点
Pnew->Pnext = NULL;//将 新节点的 指针区 清零
Ptail = Pnew;//移动 的尾节点 移动到 最尾
}
return Phead;
}
void traverse_list(PNode Phead)//输出全部信息
{
if(Phead->Pnext == NULL)
{
printf("这是个空表\n");
return;
}
PNode P = (PNode)malloc(sizeof(Node));//创建一个新的节点
if(P == NULL)
{
printf("分配失败\n");
exit(-1);
}
int i=1;
P = Phead;
while(1)
{
P = P->Pnext;//P指向有效区
if(P == NULL)
break;
else
{
printf("第%d个数是%d\n",i,P->data);
i++;
}
}
}
int changdu(PNode Phead)//计算长度
{
int len;
PNode P = (PNode)malloc(sizeof(Node));
if(P == NULL)
{
printf("分配失败\n");
exit(-1);
}
P = Phead;
len=0;
while(P->Pnext!=NULL)
{
P = P->Pnext;
len++;
}
return len;
}
void paixu(PNode Phead)//这个怎么 排序无效,想不懂
{
int len=changdu(Phead);
int i,j;
int temp;
PNode P;
PNode Q;
for(i=1,P=Phead->Pnext;i<=len-1;i++,P=P->Pnext);
for(j=i+1,Q=P->Pnext;j<=len;j++,Q=Q->Pnext)
{
if(P->data>Q->data)
{
temp = P->data;
P->data = Q->data;
Q->data = temp;
}
}
printf("已排序完成“标志”\n");
}
/************************************测试数据******************************************
请输入你要分配的节点个数
5
输入第1个节点的信息
5
输入第2个节点的信息
4
输入第3个节点的信息
3
输入第4个节点的信息
2
输入第5个节点的信息
1
第1个数是5
第2个数是4
第3个数是3
第4个数是2
第5个数是1
已排序完成“标志”
第1个数是5
第2个数是4
第3个数是3
第4个数是2
第5个数是1
Press any key to continue
**************************************************************************************/
找了很久没找到 错误的地方,请 大神 指点,在这里先谢谢了!