/*** 线性表的链式存储*/#include#include#include#include"LinkList.h"typedefstruct_tag_LinkList
{
LinkListNode header;intlength;
}TLinkList;/**************************************************************************
** 函 数 名: LinkList_Create
** 函数作用: 创建一个链式存储的线性表
** 函数参数: void
** 返 回 值: LinkList*
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/LinkList*LinkList_create()
{
TLinkList* pstRet = (TLinkList *)malloc(sizeof(TLinkList));if (NULL !=pstRet)
{
pstRet->length = 0;
pstRet->header.next =NULL;
}returnpstRet;
}/**************************************************************************
** 函 数 名: LinkList_Destroy
** 函数作用: 销毁一个链式存储的线性表
** 函数参数: LinkList*
** 返 回 值: void
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
void LinkList_Destroy(LinkList*pstList)
{free(pstList);
}/**************************************************************************
** 函 数 名: LinkList_Clear
** 函数作用: 清空一个链式存储的线性表
** 函数参数: LinkList*
** 返 回 值: void
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
void LinkList_Clear(LinkList*pstList)
{
TLinkList* pstRet = (TLinkList *)pstList;if (NULL !=pstRet)
{
pstRet->length = 0;
pstRet->header.next =NULL;
}return;
}/**************************************************************************
** 函 数 名: LinkList_Lenght
** 函数作用: 得到一个链式存储的线性表的长度
** 函数参数: LinkList*
** 返 回 值: int
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
int LinkList_Lenght(LinkList*pstList)
{
TLinkList* pstRet = (TLinkList *)pstList;int iRet = -1;if (NULL !=pstRet)
{
iRet= pstRet->length;
}returniRet;
}/**************************************************************************
** 函 数 名: LinkList_Insert
** 函数作用: 在一个链式存储的线性表的指定位置插入节点
** 函数参数: LinkList* pstList
** LinkListNode* pstNode
** int iPos
** 返 回 值: int
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/
int LinkList_Insert(LinkList* pstList, LinkListNode* pstNode, intiPos)
{
TLinkList* pstTemp = (TLinkList *)pstList;
LinkListNode*pstNodeCurrent;int iRet = ((NULL != pstTemp) && (iPos >= 0) && (NULL !=pstNode));intiLoop;if(iRet)
{
pstNodeCurrent= (LinkListNode*)pstTemp;for (iLoop = 0; (iLoop < iPos) && (pstNodeCurrent->next != NULL); iLoop++)
{
pstNodeCurrent= pstNodeCurrent->next;
}
pstNode->next = pstNodeCurrent->next;
pstNodeCurrent->next =pstNode;
pstTemp->length++;
}returniRet;
}/**************************************************************************
** 函 数 名: LinkList_Get
** 函数作用: 获得一个链式存储的线性表的指定位置节点
** 函数参数: LinkList* pstList
** int iPos
** 返 回 值: LinkListNode*
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/LinkListNode* LinkList_Get(LinkList* pstList, intiPos)
{
TLinkList* pstTemp = (TLinkList *)pstList;
LinkListNode* pstNodeRet =NULL;
LinkListNode* pstNodeCur =NULL;intiLoop;if ((NULL != pstTemp) && (iPos >= 0) && (iPos <= pstTemp->length))
{
pstNodeCur= (LinkListNode*)pstTemp;for (iLoop = 0; iLoop < iPos; iLoop++)
{
pstNodeCur= pstNodeCur->next;
}
pstNodeRet= pstNodeCur->next;
}returnpstNodeRet;
}/**************************************************************************
** 函 数 名: LinkList_Delete
** 函数作用: 删除一个链式存储的线性表的指定位置节点
** 函数参数: LinkList* pstList
** int iPos
** 返 回 值: LinkListNode*
**
** 日 期: 2017年2月14日
** 作 者: Rookie
***************************************************************************/LinkListNode* LinkList_Delete(LinkList* pstList, intiPos)
{
TLinkList* pstTemp = (TLinkList *)pstList;
LinkListNode* pstNodeRet =NULL;
LinkListNode* pstNodeCur =NULL;intiLoop;if ((NULL != pstTemp) && (iPos >= 0) && (iPos < pstTemp->length))
{
pstNodeCur= (LinkListNode*)pstTemp;for (iLoop = 0; iLoop < iPos; iLoop++)
{
pstNodeCur= pstNodeCur->next;
}
pstNodeRet= pstNodeCur->next;
pstNodeCur->next = pstNodeRet->next;
pstTemp->length--;
}returnpstNodeRet;
}