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

来源:互联网 发布:路由器绑定mac 编辑:程序博客网 时间:2024/06/10 23:22

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

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

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

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



阅读全文
0 0
原创粉丝点击