数据结构 求链表的长度以及用冒泡排序的算法对链表中的值进行排序

在创建好一个链表后,并且对链表中结点中数据域赋予值后,可以对各节点中的数据域的值进行排序,并且可以求出链表的长度

如何求出一个链表的长度:

在前面的博客中讲到对链表的遍历输出,其实链表的长度的求法和链表的遍历很相似,首先判断第一个结点是否为空,

如果第一个结点为空,直接返回,说明此链表为空,长度为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



发布了35 篇原创文章 · 获赞 18 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Z_Dream_ST/article/details/77586533