
用VS2013编辑器编写的C语言单向链接列表代码:
#include
#include
typedef int TypeData;
#define NODE_LENGTH sizeof(NODE)
/ **定义链接列表的结构* /
typedef struct tagNode
{
TypeData tdData;
struct tagNode * plNext;
} NODE;
/ *******函数声明**************************** /
节点* createList(TypeData tdInData);
int forEachList(NODE * pstInHead);
int insertListTail(节点* pstInHead,TypeData tdInData);
int insertListHead(NODE * pstInHead,TypeData tdInData);
int getListLength(NODE * pstInHead);
int delListHead(NODE * pstInHead);
int delListTail(NODE * pstInHead);
int sortList(节点* pstInHead,int nInFlag);
int clearList(NODE * pstInHead);
/ *********************************************
功能功能: 创建一个新的链表,以牵头节点
函数输入参数: tdInData标头节点的值
返回值: 非NULL成功
NULL失败
********************************************** /
节点* createList(TypeData tdInData)
{
NODE * pstNewNode =(NODE *)malloc(NODE_LENGTH);
如果(NULL == pstNewNode)
{
printf(“ createList: malloc失败”);
返回NULL;
}
pstNewNode-> plNext = NULL;
pstNewNode-> tdData = tdInData;
返回pstNewNode;
}
/ *********************************************
函数功能: 遍历整个链表并显示链表的值,
函数输入参数: pstInHead链表的头节点
返回值: 0成功
1个失败
********************************************** /
int forEachList(节点* pstInHead)
{
如果(NULL == pstInHead)
{
printf(“ forEachList: 参数pstInHead为NULL”);
返回1;
}
while(NULL!= pstInHead-> plNext)
{
printf(“%d->”,pstInHead-> tdData);
pstInHead = pstInHead-> plNext;
}
printf(“%d \ n”,pstInHead-> tdData);
返回0;
}
/ *********************************************
功能功能: 在链接列表的末尾插入数据
函数输入参数: pstInHead链表的头节点
tdInData在末尾插入数据值
返回值: 0成功
1个失败
********************************************** /
int insertListTail(节点* pstInHead,TypeData tdInData)
{
如果(NULL == pstInHead)
{
printf(“ insertListTail: 参数pstInHead为NULL”);
返回1;
}
while(NULL!= pstInHead-> plNext)
{
pstInHead = pstInHead-> plNext;
}
NODE * pstNewNode =(NODE *)malloc(NODE_LENGTH);
如果(NULL == pstNewNode)
{
printf(“ insertListTail: malloc pstNewNode失败”);
返回1;
}
pstNewNode-> plNext = NULL;
pstNewNode-> tdData = tdInData;
pstInHead-> plNext = pstNewNode;
返回0;
}
/ *********************************************
功能功能: 在链表的开头插入数据,即在开头节点之后插入数据
函数输入参数: pstInHead链表的头节点
tdInData在末尾插入数据值
返回值: 0成功
1个失败
********************************************** /
int insertListHead(节点* pstInHead,TypeData tdInData)
{
如果(NULL == pstInHead)
{
printf(“ insertListHead: 参数pstInHead为NULL”);
返回1;
}
NODE * pstNewNode =(NODE *)malloc(NODE_LENGTH);
如果(NULL == pstNewNode)
{
printf(“ insertListTail: malloc pstNewNode失败”);
返回1;
}
pstNewNode-> tdData = tdInData;
/ **将此节点插入头部* /
pstNewNode-> plNext = pstInHead-> plNext;
pstInHead-> plNext = pstNewNode;
返回0;
}
/ *********************************************
功能功能: 删除头节点
函数输入参数: pstInHead链表的头节点
返回值: 0成功
1个失败
********************************************** /
int delListHead(NODE * pstInHead)
{
如果(NULL == pstInHead)
{
printf(“ delListHead: 参数pstInHead为NULL”);
返回1;
}

int nListLen = getListLength(pstInHead);
节点* pstTempNode = NULL;
/ **仅当链接列表的长度至少为2时才能删除头部* /
如果(nListLen> = 2)
{
pstTempNode = pstInHead-> plNext;
pstInHead-> plNext = pstInHead-> plNext-> plNext;
免费(pstTempNode);
}
返回0;
}
/ *********************************************
函数功能: 获取链表的长度,包括头节点
函数输入参数: pstInHead链表的头节点
返回值: 0成功
1个失败
********************************************** /
int getListLength(NODE * pstInHead)
{
int nLen = 0;
如果(NULL == pstInHead)
{
printf(“ getListLength: 参数pstInHead为NULL”);
返回1;
}
while(NULL!= pstInHead)
{
nLen ++;
pstInHead = pstInHead-> plNext;
}
返回nLen;
}
/ *********************************************
功能功能: 删除链表的末端节点
函数输入参数: pstInHead链表的头节点
返回值: 0成功
1个失败
********************************************** /
int delListTail(节点* pstInHead)
{
如果(NULL == pstInHead)
{
printf(“ delListTail: 参数pstInHead为NULL”);
返回1;
}
int nListLen = getListLength(pstInHead);
/ **如果仅直接返回头节点* /
如果(1 == nListLen)
{
返回0;
}
while(NULL!= pstInHead-> plNext-> plNext)
{
pstInHead = pstInHead-> plNext;
}
节点* pstTempNode = pstInHead-> plNext;
pstInHead-> plNext = NULL;
免费(pstTempNode);
返回0;
}
/ *********************************************
功能功能: 对整个链表进行排序,头节点不参与排序
函数输入参数: pstInHead链表的头节点
nInFlag 0下降,1上升

返回值: 0成功
1个失败
********************************************** /
int sortList(节点* pstInHead,int nInFlag)
{
如果(NULL == pstInHead)
{
printf(“ sortList: 参数pstInHead为NULL”);
返回1;
}
int nListLen = getListLength(pstInHead);
/ **如果只有头节点,则不需要比较c 链表实现,请直接返回* /
如果(1 == nListLen)
{
返回0;
}
节点* pstTempNode = NULL;
pstInHead = pstInHead-> plNext;
TypeData tdTempData = 0;
/ **如果订单为肯定订单* /
如果(0 == nInFlag)
{
while(NULL!= pstInHead-> plNext)
{
pstTempNode = pstInHead-> plNext;
while(NULL!= pstTempNode)
{
如果(pstInHead-> tdData> pstTempNode-> tdData)
{
tdTempData = pstInHead-> tdData;
pstInHead-> tdData = pstTempNode-> tdData;
pstTempNode-> tdData = tdTempData;
}
pstTempNode = pstTempNode-> plNext;
}
pstInHead = pstInHead-> plNext;
}
}
/ **如果顺序相反* /
否则(1 == nInFlag)
{
while(NULL!= pstInHead-> plNext)
{
pstTempNode = pstInHead-> plNext;
while(NULL!= pstTempNode)
{
如果(pstInHead-> tdData
{
tdTempData = pstInHead-> tdData;
pstInHead-> tdData = pstTempNode-> tdData;
pstTempNode-> tdData = tdTempData;
}
pstTempNode = pstTempNode-> plNext;
}
pstInHead = pstInHead-> plNext;
}
}
其他
{
printf(“您的选择有误. 请输入(0 | 1)\ n”);
}
返回0;
}
/ *********************************************

功能功能: 清除整个链表
函数输入参数: pstInHead链表的头节点
返回值: 0成功
1个失败
********************************************** /
int clearList(NODE * pstInHead)
{
如果(NULL == pstInHead)
{
printf(“ clearList: 参数pstInHead为NULL”);
返回1;
}
int nListLen = getListLength(pstInHead);
/ **临时链接列表的头节点* /
节点* pstTempHead = pstInHead;
/ **如果仅直接返回头节点* /
如果(1 == nListLen)
{
返回0;
}
节点* pstTempNode = NULL;
pstInHead = pstInHead-> plNext;
while(NULL!= pstInHead)
{
pstTempNode = pstInHead;
pstInHead = pstInHead-> plNext;
免费(pstTempNode);
}
pstTempHead-> plNext = NULL;
返回0;
}
int main()
{
节点* pstListHead = createList(-1);
/ **测试头和尾部功能* /
insertListTail(pstListHead,11);
insertListTail(pstListHead,12);
insertListTail(pstListHeadc 链表实现,13);
insertListTail(pstListHead,5);
insertListHead(pstListHead,22);
/ **遍历整个链表* /
forEachList(pstListHead);
/ **测试删除头节点* /
delListHead(pstListHead);
forEachList(pstListHead);
/ **测试删除尾节点* /
delListTail(pstListHead);
forEachList(pstListHead);
/ **测试空白列表* /
clearList(pstListHead);
forEachList(pstListHead);
/ **测试头和尾部功能* /
insertListTail(pstListHead,101);
insertListTail(pstListHead,2);
insertListTail(pstListHead,76);
insertListTail(pstListHead,43);
insertListHead(pstListHead,22);
insertListHead(pstListHead,333);
forEachList(pstListHead);
/ *测试肯定排序功能** /
sortList(pstListHead,0);
forEachList(pstListHead);
/ *测试反向排序功能** /
sortList(pstListHead,3);
forEachList(pstListHead);
系统(“暂停”);
返回0;
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159191-1.html
我们是有了里子
如果我们不趁机加强南海诸岛的军事存在
尽快在南海建立军事设施