设为首页 加入收藏

TOP

一步一步写算法(之双向链表)(二)
2014-11-23 23:33:49 来源: 作者: 【 】 浏览:6
Tags:步一步 算法 双向
);

assert(NULL != pNode);

pIndex = *ppDLinkNode;

while(NULL != pIndex->next)

pIndex = pIndex->next;

pNode->prev = pIndex;

pNode->next = pIndex->next;

pIndex->next = pNode;

return TRUE;

}

STATUS insert_data_into_double_link(DOUBLE_LINK_NODE** ppDLinkNode, int data)

{

DOUBLE_LINK_NODE* pNode;

DOUBLE_LINK_NODE* pIndex;

if(NULL == ppDLinkNode)

return FALSE;

if(NULL == *ppDLinkNode){

pNode = create_double_link_node(data);

assert(NULL != pNode);

*ppDLinkNode = pNode;

(*ppDLinkNode)->prev = (*ppDLinkNode)->next = NULL;

return TRUE;

}

if(NULL != find_data_in_double_link(*ppDLinkNode, data))

return FALSE;

pNode = create_double_link_node(data);

assert(NULL != pNode);

pIndex = *ppDLinkNode;

while(NULL != pIndex->next)

pIndex = pIndex->next;

pNode->prev = pIndex;

pNode->next = pIndex->next;

pIndex->next = pNode;

return TRUE;

} (6)双向链表中删除数据

STATUS delete_data_from_double_link(DOUBLE_LINK_NODE** ppDLinkNode, int data)

{

DOUBLE_LINK_NODE* pNode;

if(NULL == ppDLinkNode || NULL == *ppDLinkNode)

return FALSE;

pNode = find_data_in_double_link(*ppDLinkNode, data);

if(NULL == pNode)

return FALSE;

if(pNode == *ppDLinkNode){

if(NULL == (*ppDLinkNode)->next){

*ppDLinkNode = NULL;

}else{

*ppDLinkNode = pNode->next;

(*ppDLinkNode)->prev = NULL;

}

}else{

if(pNode->next)

pNode->next->prev = pNode->prev;

pNode->prev->next = pNode->next;

}

free(pNode);

return TRUE;

}

STATUS delete_data_from_double_link(DOUBLE_LINK_NODE** ppDLinkNode, int data)

{

DOUBLE_LINK_NODE* pNode;

if(NULL == ppDLinkNode || NULL == *ppDLinkNode)

return FALSE;

pNode = find_data_in_double_link(*ppDLinkNode, data);

if(NULL == pNode)

return FALSE;

if(pNode == *ppDLinkNode){

if(NULL == (*ppDLinkNode)->next){

*ppDLinkNode = NULL;

}else{

*ppDLinkNode = pNode->next;

(*ppDLinkNode)->prev = NULL;

}

}else{

if(pNode->next)

pNode->next->prev = pNode->prev;

pNode->prev->next = pNode->next;

}

free(pNode);

return TRUE;

} (7)统计双向链表中数据的个数

int count_number_in_double_link(const DOUBLE_LINK_NODE* pDLinkNode)

{

int count = 0;

DOUBLE_LINK_NODE* pNode = (DOUBLE_LINK_NODE*)pDLinkNode;

while(NULL != pNode){

count ++;

pNode = pNode->next;

}

return count;

}

int count_number_in_double_link(const DOUBLE_LINK_NODE* pDLinkNode)

{

int count = 0;

DOUBLE_LINK_NODE* pNode = (DOUBLE_LINK_NODE*)pDLinkNode;

while(NULL != pNode){

count ++;

pNode = pNode->next;

}

return count;

} (8)打印双向链表中数据

void print_double_link_node(const DOUBLE_LINK_NODE* pDLinkNode)

{

DOUBLE_LINK_NODE* pNode

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇子函数参数传递地址 下一篇一步一步写算法(之线性队列)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: