链表升序排列(尾插)

# include

# include

9 # define N

typedef结构节点{

,,int 数据;

,,结构节点*下;

} ElemSN;

ElemSN *创建(int [], int n) {,,

,,,,,,,,, int我;

,,,,,,* p ElemSN * h=零;

,,,,,,,(i=n - 1; i>=0;我——){

,,,,,,,,,,p=(ElemSN *) malloc (sizeof (ElemSN));

,,,,p→数据=https://www.yisu.com/zixun/a[我];

,,,,p→下=h;

,,,,h=p;

}

返回h;

,,}

空白printlink (ElemSN * h) {

,,,ElemSN * p;

,,(p=h; p, p=p→下)

,,printf (“% d \ n" p→数据),

,,}

, ElemSN * SelectSont (ElemSN * h) {

,,,ElemSN * p * q * pmin, * qmin, * h2, * t;//t为尾结点

h2=零;

, (h) {

,,,,,,(pmin=q=h, h p=?p, q=p, p=p→下){,,

,,,,,如果(pmin→data> p→数据){

,,,,,,,,,,pmin=p;

,,,, qmin=问;

,,,,,}

,,,,,}//循环出来,pmin指着最小值,问指最小值的前一结点

,,,,如果(pmin-h)

,,,,,qmin→下=pmin→下;

else ,//如果pmin不为头结点,断链挂链,pmin的指针域给NULL,如果为头结点,头指针后移,pmin的指针域给空

, h=h→下;

,,,,pmin→下=零;

如果(h2),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

h2=t=pmin;

else ,,,//h2为NULL,说明只有一个结点,h2, t, pmin在同一个结点,,否则,pmin结点挂在t结点上(尾插),t后移,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

t→下=pmin;

t=pmin,

,,,,},

返回h2;

,}


int主要(void) {

int [N]={9、8、7、6、5、4、3、2、1};

ElemSN *头;

,,,,头=创建(9);

=SelectSont头(头);

printlink(头),

}


链表升序排列(尾插)