zoukankan      html  css  js  c++  java
  • 单向链表

        (1)设计链表的数据结构

    typedef struct _LINK_NODE

    {

        int data;

    struct _LINK_NODE* next;

    }LINK_NODE;

        (2)创建链表

    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)删除链表

    void delete_node(LINK_NODE** pNode)

    {

        LINK_NODE** pNext;

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

       return ;

    //这个函数如果你传过去的是一个指针(LINK_NODE* pnode),那么你传的是指针的值,也就是说你在里面改变了指针的指向地址是没有用的,因为值传递,原来的指针并未改变。一
    造成这一个误解的原因是经典的swap函数 void swap(int *a, int *b)可以交换成功。那个传的也是指针的值,但是他改变的是指针的值指向的内容,而不是指针的值。

    pNext = &(*pNode)->next;

    free(*pNode);

    delete_node(pNext);

    }

        (4)链表插入数据

    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)删除数据

    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)查找数据

    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)打印数据

    void print_node(const LINK_NODE* pLinkNode)

    {

        if(pLinkNode){

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

    print_node(pLinkNode->next);

    }

    }

        (8)统计数据

    int count_node(const LINK_NODE* pLinkNode)

    {

        if(NULL == pLinkNode)

       return 0;

    return 1 + count_node(pLinkNode->next);

    }

  • 相关阅读:
    maven+spark2.0.0最大连通分量
    Eclipse+maven+scala2.11.8+spark2.0.0的环境部署
    杀死mapreduce
    filter-自己的理解
    JS变量声明提升
    js==运算符强制转换规则
    html 文字间距
    如你所见,我开始用微博
    vue数据模拟
    vue项目目录介绍
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5497828.html
Copyright © 2011-2022 走看看