# include <stdio.h>
# include <malloc.h>
typedef struct node
{
int data;
struct node * pnext;
} NODE, * PNODE;
PNODE build_list()
{
int len;
int val;
PNODE phead = (PNODE)malloc(sizeof(NODE));//构造头节点
PNODE tail = phead; //构造永远指向尾节点的tail指针
tail->pnext = NULL;//把头节点的指针域清空
printf("请输入节点个数:");
scanf("%d",&len);
for (int i = 0; i < len; ++i)
{
PNODE pnew = (PNODE)malloc(sizeof(NODE));
printf("请输入第%d个节点的值:",i + 1);
scanf("%d",&val);
pnew->data = val;
tail->pnext = pnew;
tail = pnew;
tail->pnext = NULL;
}
return phead;
}
void traverse_list(PNODE phead)
{
PNODE p;
p = phead;
while (p->pnext != NULL)
{
p = p->pnext;
printf("%d ",p->data);
}
printf("\n");
return ;
}
int long_list(PNODE phead)
{
PNODE p = phead->pnext;
int len = 0;
while (NULL != p)
{
len ++;
p = p->pnext;
}
return len;
}
void sort_list(PNODE phead,int len) //排序
{
int i,j,t;
PNODE p,q ;
for (i = 0,p = phead->pnext; i < len-1; ++i,p = p->pnext)
{
for (j = i + 1,q = p->pnext; j < len; ++j,q = q->pnext)
{
if (q->data < p->data) //a[j] < a[j + 1]
{
t = q->data; // t = a[j];
q->data = p->data; //a[j] = a[j+1];
p->data = t; //a[j+1] = t;
}
}
}
}
int main(void)
{
PNODE phead ;
phead = build_list();
traverse_list(phead);
int len = long_list(phead);
sort_list(phead,len);
traverse_list(phead);
return 0;
}
|