永发信息网

怎么用C语言写单链表的排序

答案:2  悬赏:50  手机版
解决时间 2021-04-27 08:07
head指向链表的头节点,
最佳答案
从键盘输入不定数量的数字构造链表,输入0结束,然后排序输出,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct _list {
int val;
struct _list* next;
} *node, list;


node Insert( node* head, node pos, int val )
{
node tmp;
tmp = ( node )malloc( sizeof( list ) );
tmp->val = val;
tmp->next = pos ? pos->next : *head;
if ( pos ) {
pos->next = tmp;
} else {
*head = tmp;
}
return tmp;
}


node Create( void )
{
node head, t;
int n;
head = t = NULL;
while ( scanf( "%d", &n ) && n != 0 ) {
t = Insert( &head, t, n );
}
return head;
}


void Print( node head )
{
while ( head ) {
printf( "%d ", head->val );
head = head->next;
}
putchar( '\n' );
}


node msort( node* head, int n )
{
int i, m;
node l, r, p, *x, *y;
if ( n < 2 ) return *head;
m = n/2;
p = l = r = *head;
for ( i = m; i > 0; --i )
p = r, r = r->next;
p->next = NULL;
l = msort( &l, m );
r = msort( &r, n - m );
x = &p;
while ( l && r ) {
*x = l->val < r->val ? (y = &l, l) : (y = &r, r);
*y = (*y)->next; x = &(*x)->next;
}
l = l ? l : r ? r : NULL;
*x = l; *head = p;
return p;
}


void Sort( node* head )
{
int i;
node tmp = *head;
for ( i = 0; tmp; ++i, tmp = tmp->next );
msort( head, i );
}


int main( void )
{
node head = Create();
Print( head );
Sort( &head );
Print( head );
getch();
return 0;
}


望采纳
全部回答
#include"stdio.h" #include"stdlib.h" #define MAX 20 struct node { int num; struct node *next; }; typedef struct node node; void main() { int a[MAX]={4,3,3,7,4,8,1,2,2,7,6,7,9,12,15,0,-1,243,23,1}; int i; node *head,*p,*tail,*t; head=NULL; for (i=0;i<MAX;i++) { p=(node *)malloc(sizeof(node)); p->num=a[i]; p->next=NULL; if (head==NULL) head=t=p; else { t=head; while (t!=NULL) { if (p->num<t->num && t->next==NULL) { t->next=p; break; } else if (p->num>t->num && t!=head) { tail->next=p; p->next=t; break; } else if (p->num>t->num && t==head) { p->next=t; head=p; break; } tail=t; t=t->next; } } } while (head!=NULL) { printf("%d,",head->num); head=head->next; } printf("\n"); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
白色腰带现在还能打么
最无语的qq名
我的QQ为什么老是在别人的QQ上提示上线
沈阳最近为什么要严打?
为什么我的空间会这样
什么是唐诗之路,绝句是唐诗的一种主要题材它
请问德阳什么地方有格子铺出租的,
可以送我Q币吗
本人喜欢玩手机.有用过诺基亚E63的进
格力空调kfr72l(清新风)新2级和老节能一级有
我的手机是多普达C720W,现在显示的字都是方块
食美轩黄焖鸡(青大一路店)怎么去啊,有知道地
除了打电话,发短信,下软件还有哪些方法可以
读书充实自己唯美句子,以读书为话题写一篇作
安徽白天播放的是什么连续剧
推荐资讯
急求一个飞行类游戏
亥时生人会克吗?
CF中要怎样才能把名字给复制到游戏里面..怎么
阿喀琉斯永远追不上龟,为什么还要追呢?
我的皮肤好奇怪 专家来帮帮忙
诛仙新区和老区哪好玩?哪省钱升级也快?
为什么面板上显示不出好有印象
诺基亚5530XM好不好用?
梦见穿错鞋会怎样?
人生该如何规划比较好???
一个正多边形的周长是100·边长是10·则它是
怎么才能学好外语
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?