在创建好一个链表后,并且对链表中结点中数据域赋予值后,可以对各节点中的数据域的值进行排序,并且可以求出链表的长度
如何求出一个链表的长度:
在前面的博客中讲到对链表的遍历输出,其实链表的长度的求法和链表的遍历很相似,首先判断第一个结点是否为空,
如果第一个结点为空,直接返回,说明此链表为空,长度为0。如果第一个结点不为空,将长度加一,再进行指向第二个结点,
判断第二个结点是否为空,如果为空,返回当前长度。如果不为空,长度加一,并指向下一个结点。以此类推,直到判断出结点为空,返回长度。
#include <stdio.h>
#include <malloc.h>
#include <time.h>
typedef struct list
{
int vaule; //数据域
struct list *PNext; //指针域
}TNODE, *TPNODE;
TPNODE Creat_list();
void Trave_list(TPNODE _PHead);
int GetListLen(TPNODE _PHead);
int SortList(TPNODE _pHead, int _iLen);
int main()
{
int iRet = 0;
TPNODE PHead;
srand((int)time(NULL));
PHead = Creat_list(); //创建链表
Trave_list(PHead); //遍历链表,输出链表中的数值
iRet = GetListLen(PHead); //获取链表长度
printf("This Len of List is %d\n", iRet);
SortList(PHead, iRet); //对链表进行排序
Trave_list(PHead); //遍历链表,输出链表中的数值
return 0;
}
//创建链表
TPNODE Creat_list()
{
int i = 0;
int len = 0;
int iVaule = 0;
TPNODE pHead;
pHead = (TPNODE)malloc(sizeof(TNODE)); //创建一个头结点
if(NULL == pHead) //创建失败
{
printf("create list fail\n");
}
TPNODE PTail = pHead;
pHead->PNext = NULL;
printf("please input len of list\n");
scanf("%d", &len); //输入想要的个数
for(i = 0; i < len; i++)
{
iVaule = rand()%100+1;
TPNODE pNew = (TPNODE)malloc(sizeof(TNODE)); //分配内存
pNew->vaule = iVaule; //将数据域赋予数据
PTail->PNext = pNew;
pNew->PNext = NULL;
PTail = pNew;
}
return pHead;
}
//链表输出
void Trave_list(TPNODE _PHead)
{
int i = 0;
TPNODE P = _PHead->PNext;
while(NULL != P)
{
i = 1;
printf("%d ", P->vaule);
P = P->PNext;
}
if(1 == i)
{
printf("\n");
}
}
//获取链表的长度
int GetListLen(TPNODE _PHead)
{
int i = 1;
TPNODE P = _PHead->PNext;
while(NULL != P)
{
P = P->PNext;
i++;
}
return i -1;
}
//对链表的数据进行排序
int SortList(TPNODE _pHead, int _iLen)
{
int i = 0;
int j = 0;
int iTemp = 0;
TPNODE p, q;
for(i = 0, p = _pHead->PNext; i < _iLen -1; i++, p= p->PNext)
{
for(j = 0, q = _pHead->PNext; j < _iLen - i - 1; j++, q= q->PNext)
{
if(q->vaule > q->PNext->vaule)
{
iTemp = q->vaule;
q->vaule = q->PNext->vaule;
q->PNext->vaule = iTemp;
}
}
}
}
此程序 的运行步骤1, 首先创建一个链表,用户需要输入待创建链表的长度,然后产生随机数对每一个数据域赋值。
2, 对链表中每个数据域进行输出
3, 求出链表的长度
4,通过第三步中求出链表中的长度,进而对链表中的数据进行排序
5, 对排序后的结果进行输出
创建链表与遍历链表:http://blog.csdn.net/z_dream_st/article/details/77142223
数据结构 冒泡排序详解:http://blog.csdn.net/z_dream_st/article/details/77539917