C语言链表,请大神完善一下排序,只差排序了~

链接:http://pan.baidu.com/s/1eQxX0xO 密码:xpn4 源码
2024-12-18 12:36:44
推荐回答(2个)
回答1:

排序原本的不能用,改了一下,包括返回值。

p paixu(p L){
p p1, end, last, t;
end = NULL;

while(L!=end)
{
p1 = L;
last = NULL;
while(1)
{
if(p1->next == end)
{
end = p1;
break;
}
if(p1->grade > p1->next->grade)
{
t = p1->next;
p1->next = p1->next->next;
if(last == NULL)
{
L = p1 = t;
}
else 
{
last->next = t;
}
}
last = p1;
p1 = p1->next;
}
}

return L;

}

另外,调用排序的地方需要改成

case 7:H = paixu(H);break;

这个是主函数里面的。

其它的功能你说好了,我也没测。就测了一下排序和输出,就是7和6.看起来没问题

你试试,有问题再追问

回答2:

#include
#include
#include

typedef struct node1
{
int data;
struct node1 *next;
} node;

//node* Linklist;
node* createlist(int n)
{
node *p,*q,*head;
int i=0,x;
head=//new node;//
(node *)malloc(sizeof(node));
head->next=NULL;
q=head;
printf("请输入排序的数字:\n");
for(i=0;i {
scanf("%d",&x);
p=//new node;//
(node *)malloc(sizeof(node));
p->data=x;
p->next=NULL;
q->next=p;
q=p;
p=NULL;
}
return head;
}

node* bubblesort(node* head)
{
node *p,*q,*tail,*s;
tail=NULL;
while(head->next!=tail)
{
p=head;
q=p->next;
while(q->next!=tail)
{
if(p->next->data>q->next->data)
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}
p=p->next;
q=q->next;
}
tail=q;
}

return tail;
}

void output(node* head)
{
node* p;
p=head->next;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
}

int main()
{
int n;
node *head;
printf("需输入几个排序数:\n");
scanf("%d",&n);
head=createlist(n);
printf("排序前:\n");
output(head);
bubblesort(head);
printf("\n排序后:\n");
output(head);
return 1;
}