• 单向链表


        (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);

    }

  • 相关阅读:
    C++ STL介绍——String类
    C++ STL介绍——简介
    使用anaconda安装tensorflow (windows10环境)
    JAVA面向对象编程课程设计——项目部署
    JAVA面向对象编程课程设计——web版斗地主
    JAVA面向对象编程课程设计——网络版单机斗地主
    在ASP.NET MVC中使用Web API和EntityFramework构建应用程序
    记一次类型设计的求索历程
    设计模式之策略模式在地铁票价系统中的应用
    C#中的var和dynamic
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5497828.html
Copyright © 2020-2023  润新知