您的位置:首页 > 其它

单向链表

2015-12-17 22:14 92 查看
    (1)设计链表的数据结构

[cpp] view
plaincopy

typedef struct _LINK_NODE  

{  

    int data;  

    struct _LINK_NODE* next;  

}LINK_NODE;  

    (2)创建链表

[cpp] view
plaincopy

LINK_NODE* alloca_node(int value)  

{  

    LINK_NODE* pLinkNode = NULL;  

    pLinkNode = (LINK_NODE*)malloc(sizeof(LINK_NODE));  

      

    pLinkNode->data = value;  

    pLinkNode->next = NULL;  

    return pLinkNode;  

}  

    (3)删除链表

[cpp] view
plaincopy

void delete_node(LINK_NODE** pNode)  

{  

    LINK_NODE** pNext;  

    if(NULL == pNode || NULL == *pNode)  

        return ;  

<
15309
span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">          

    pNext = &(*pNode)->next;  

    free(*pNode);  

    delete_node(pNext);   

}  

    (4)链表插入数据

[cpp] view
plaincopy

STATUS _add_data(LINK_NODE** pNode, LINK_NODE* pDataNode)  

{  

    if(NULL == *pNode){  

        *pNode = pDataNode;  

        return TRUE;  

    }  

      

    return _add_data(&(*pNode)->next, pDataNode);  

}  

  

STATUS add_data(const LINK_NODE** pNode, int value)  

{  

    LINK_NODE* pDataNode;  

    if(NULL == *pNode)  

        return FALSE;  

          

    pDataNode = alloca_node(value);  

    assert(NULL != pDataNode);  

    return _add_data((LINK_NODE**)pNode, pDataNode);  

}  

    (5)删除数据

[cpp] view
plaincopy

STATUS _delete_data(LINK_NODE** pNode, int value)  

{  

    LINK_NODE* pLinkNode;  

    if(NULL == (*pNode)->next)  

        return FALSE;  

      

    pLinkNode = (*pNode)->next;  

    if(value == pLinkNode->data){  

        (*pNode)->next = pLinkNode->next;  

        free(pLinkNode);  

        return TRUE;  

    }else{  

        return _delete_data(&(*pNode)->next, value);  

    }  

}  

  

STATUS delete_data(LINK_NODE** pNode, int value)  

{  

    LINK_NODE* pLinkNode;  

    if(NULL == pNode || NULL == *pNode)  

        return FALSE;  

  

    if(value == (*pNode)->data){  

        pLinkNode = *pNode;  

        *pNode = pLinkNode->next;  

        free(pLinkNode);  

        return TRUE;  

    }         

      

    return _delete_data(pNode, value);  

}  

    (6)查找数据

[cpp] view
plaincopy

LINK_NODE* find_data(const LINK_NODE* pLinkNode, int value)  

{  

    if(NULL == pLinkNode)  

        return NULL;  

      

    if(value == pLinkNode->data)  

        return (LINK_NODE*)pLinkNode;  

      

    return find_data(pLinkNode->next, value);  

}  

    (7)打印数据

[cpp] view
plaincopy

void print_node(const LINK_NODE* pLinkNode)  

{  

    if(pLinkNode){  

        printf("%d\n", pLinkNode->data);  

        print_node(pLinkNode->next);  

    }  

}  

    (8)统计数据

[cpp] view
plaincopy

int count_node(const LINK_NODE* pLinkNode)  

{  

    if(NULL == pLinkNode)  

        return 0;  

          

    return 1 + count_node(pLinkNode->next);  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: