今天继续学习了链表,这次是检测链表是否为空,计算链表长度,这都是蛮简单的,最后就是给链表排序,这里的链表排序是当然是最简单的冒泡排序。
还是希望和新手一起学习,希望得到大牛指点······
这次代码还是基于上次 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 ;
}
欢迎大神指正批评·······新手一起学习······