【数据结构】C语言判断链表是否为空,计算链表长度及链表排序算法,C语言实现链表的创建及遍历链表

      今天继续学习了链表,这次是检测链表是否为空,计算链表长度,这都是蛮简单的,最后就是给链表排序,这里的链表排序是当然是最简单的冒泡排序。

还是希望和新手一起学习,希望得到大牛指点······

      这次代码还是基于上次 C语言实现链表的创建及遍历链表这个文章中的代码,直接在这上面写的,添加的,检测是否为空函数,计算链表长度函数,和链表排序函数,好了,上代码了。

/*

            链表创建,遍历,检测是否为空,计算链表长度,排序

       编译环境:VC++ 6.0
       编译系统:windows XP SP3

*/

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

//
    定义链表中的节点

typedef 
struct node

{

    
int member;                
//
    节点中的成员

    
struct node *pNext;        
//
    指向下一个节点的指针

}Node,*pNode;

//
    函数声明

pNode CreateList();                 
//
  创建链表函数


void TraverseList(pNode );            
//
  遍历链表函数


bool Is_Empty(pNode);                
//
    判断链表是否为空


int LengthList(pNode);                
//
    计算链表长度函数    


void Sort_List(pNode);                
//
    链表排序函数

int main()

{

    pNode pHead = NULL;                
//
  定义初始化头节点,等价于 struct Node *pHead == NULL

    
int flag;                        
//
    存放链表是否为空的标志,

    
int Len;

    pHead = CreateList();            
//
  创建一个非循环单链表,并将该链表的头结点的地址付给pHead

    TraverseList(pHead);            
//
  调用遍历链表函数

    
if (Is_Empty(pHead) == 
true)    
//
    判断列表是否为空

    {

        
return 
0;

    }

    Len = LengthList(pHead);                
//
    调用计算链表长度函数

    printf(

链表长度: %d 个节点。\n
,Len);    

    Sort_List(pHead);                
//
    排序函数

    

    
return 
0;

}

//
    创建链表函数

pNode CreateList()

{

    
int i;                                            
//
    用于下面循环

    
int len;                                        
//
    用来存放有效节点的字数

    
int val;                                        
//
    用于临时存放用户输入的数据

    pNode pHead = (pNode)malloc(
sizeof(Node));        
//
  分配一个不存放有效数据的头结点

    pNode pTail = pHead;                            
//
    链表的最后一个节点

    pTail->pNext = NULL;                            
//
    最后一个节点的指针置为空

    printf(

请输入节点个数:
);

    scanf(

%d
,&len);

    
for(i = 
0; i < len; i++)

    {

        printf(

第 %d 个节点的数值:
,i+
1);

        scanf(

%d
,&val);

        pNode pNew = (pNode)malloc(
sizeof(Node));    
//
    为节点分配空间

        pNew->member = val;                            
//
将用户输入的数据赋给节点的成员

        pTail->pNext = pNew;                        
//
将最后一个节点的指针指向下一个新的节点

        pNew->pNext = NULL;                            
//
将新节点中的指针置为空

        pTail = pNew;                                
//
将新节点赋给最后的一个节点

    }

    
return pHead;                                    
//
返回头节点

}

//
    遍历链表函数


void TraverseList(pNode pHead)

{

    pNode p = pHead->pNext;                            
//
将头节点的指针给予临时节点p

    
while(NULL != p)                                
//
节点p不为空,循环    

    {

        printf(

%d 
,p->member);                    

        p = p->pNext;                                

    }

    printf(

\n
);

    
return ;

}

//
    判断链表是否为空


bool Is_Empty(pNode pHead)

{

    
if (NULL == pHead->pNext)                        
//
判断头节点的指针部分是否为空

    {

        printf (

链表为空!\n
);

        
return 
true;

    }

    
else

    {

        
return 
false;

    }

}

//
    计算链表长度——–是不是发现和遍历链表函数很像


int LengthList(pNode pHead)

{

    
int length = 
0;

    pNode n = pHead->pNext;

    
while(NULL != n)

    {

        ++length;

        n = n->pNext;

    }

    
return length;

}

//
    链表排序—–冒泡排序


void Sort_List(pNode pHead)

{

    
int i,j;        

    
int swap;            
//
存放交换数据的临时变量

    
int len = LengthList(pHead);    
//
获取链表长度

    pNode m,n;        

    

    
for (i = 
0,m = pHead->pNext; i < len – 
1; i++,m = m->pNext)

    {

        
for (j = i + 
1,n = m->pNext;j < len; j++,n = n->pNext)

        {

            
if (m->member < n->member)                    

            {

                swap = m->member;

                m->member = n->member;

                n->member = swap;

            }

        }

    }

    printf(

排序完后结果为:
);

    TraverseList(pHead);

    
return ;

欢迎大神指正批评·······新手一起学习······ 

    原文作者:xss
    原文地址: https://www.cnblogs.com/scrat/archive/2012/08/16/2642555.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞