⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linklist.c

📁 多叉树实现
💻 C
📖 第 1 页 / 共 2 页
字号:
} /* End of LinkListNodeDump() *//****************************************************************************  Function Name: LinkListDump**  Purpose:**    Dump link list.**  Parameters:**    tLinkListNode *linkListNodeP - Point to the link list to dump.**    void *dataDumpFunP - Function for dump the data of node.**  Return:**    None.**  Notes:**    None.**************************************************************************/eOsRetLinkListDump(tLinkListNode *linkListNodeP, void *dataDumpFunP){    eOsRet ret;    ASSERT_POINTER(linkListNodeP);    ASSERT_POINTER(dataDumpFunP);    ret = LinkListNodeDump(linkListNodeP, dataDumpFunP);    ASSERT_RETURN(ret);    if (linkListNodeP->childP != NULL)    {        ret = LinkListDump(linkListNodeP->childP, dataDumpFunP);        ASSERT_RETURN(ret);    }    if (linkListNodeP->childP != NULL)    {        ret = LinkListDump(linkListNodeP->youngBrotherP, dataDumpFunP);        ASSERT_RETURN(ret);    }    return (eOS_RET_SUCCESS);} /* End of LinkListDump() *//****************************************************************************  Function Name: LinkListNodeFind**  Purpose:**    Find macth link list node.**  Parameters:**    tLinkListNode *linkListNodeP - point to the link list node.**    void *datafindFunP - Function for compare the data of node.**    void *dataP - point to the data for compare.**  Return:**    None.**  Notes:**    None.**************************************************************************/tLinkListNode *LinkListNodeFind(tLinkListNode *linkListNodeP, void *dataFindFunP,  void *dataP){    eOsRet ret;    if ((linkListNodeP == NULL) || (dataFindFunP == NULL))    {        return (NULL);    }    ret = (*(DataFindFunP)dataFindFunP)(linkListNodeP->dataP, dataP);    if (ret == eOS_RET_SUCCESS)    {        return (linkListNodeP);    }    else    {        return (NULL);    }} /* End of LinkListNodeFind() *//****************************************************************************  Function Name: LinkListFind**  Purpose:**    Find macth link list node in specify link list.**  Parameters:**    tLinkListNode * linkListNodeP - Point to the link list.**    void *dataFindFunP - Function for compare the data of node.**    void * dataP - Point to the data for compare.**  Return:**    None.**  Notes:**    None.**************************************************************************/tLinkListNode *LinkListFind(tLinkListNode * linkListNodeP, void *dataFindFunP,  void * dataP){    tLinkListNode *matchNodeP = NULL;    tLinkListNode *findLinkListP = NULL;    if ((linkListNodeP == NULL) || (dataFindFunP == NULL))    {        return (NULL);    }    findLinkListP = linkListNodeP;    /* compare itself. */    matchNodeP = LinkListNodeFind(findLinkListP, dataFindFunP, dataP);    if (matchNodeP != NULL)    {        /* find match node.*/        return (matchNodeP);    }    /* find his young brother sub link list. */    if (linkListNodeP->youngBrotherP != NULL)    {        findLinkListP = linkListNodeP->youngBrotherP;        matchNodeP = LinkListFind(findLinkListP, dataFindFunP, dataP);        if (matchNodeP != NULL)        {            /* find match node.*/            return (matchNodeP);        }    }    /* find his child sub link list. */    if (linkListNodeP->childP != NULL)    {        findLinkListP = linkListNodeP->childP;        matchNodeP = LinkListFind(findLinkListP, dataFindFunP, dataP);        if (matchNodeP != NULL)        {            /* find match node.*/            return (matchNodeP);        }    }    /* Searched the whole list,Not find. */    return (NULL);} /* End of LinkListFind() *//****************************************************************************  Function Name: LinkListInitOrDestroy**  Purpose:**    Init or distroy a link list.**  Parameters:**    tLinkListHeader * linkListNodeP - Point to link list header.**  Return:**    None.**  Notes:**    After link list init,the operation of the header must be add child!!!**************************************************************************/eOsRetLinkListInitOrDestroy(tLinkListHeader *linkListHeaderP, void *dataOprtFunP){    eOsRet ret = eOS_RET_SUCCESS;    if (linkListHeaderP == NULL)    {        int data = 0;        *linkListHeaderP = LinkListAddNode(NULL,          eLINK_LIST_ADD_TYPE_CREATE_HEARDER, dataOprtFunP, &data);        if (*linkListHeaderP == NULL)        {            ret = eOS_RET_FAILURE;        }    }    else    {        ret = LinkListDelete(*linkListHeaderP, dataOprtFunP);    }    return (ret);} /* End of LinkListInitOrDestroy() */#ifdef MIKETESTeOsRet DataCreateFun (tLinkListNode *newNodeP, void *dataP){    int * tmpDataP;    tmpDataP = MEMALLOC(sizeof(uint32));    if (tmpDataP == NULL)    {        return (eOS_RET_FAILURE);    }    *tmpDataP = *(int *)dataP;    newNodeP->dataP = tmpDataP;    return (eOS_RET_SUCCESS);}eOsRet DataDeleteFun(tLinkListNode *deleteNodeP){    MEMFREE(deleteNodeP->dataP);    return (eOS_RET_SUCCESS);}void DataDumpFun(void *dataP){    printf("## %d ##\n",*(int *)dataP);}eOsRet DataFindFun(void *linkNodeDataP, void *dataP){    if (*(int *)linkNodeDataP == *(int *)dataP)    {        return (eOS_RET_SUCCESS);    }    else    {        return (eOS_RET_FAILURE);    }}intmain(int argc, char **argvPP){    tLinkListHeader *linkListHeaderP = NULL;    tLinkListNode *linkListHeaderP1 = NULL;    tLinkListNode *currentNodeP = NULL;    tLinkListNode *tmpNodeP;    eLinkListAddType addType;    int indexI;    int value;    eOsRet ret;    PRINTF("###\n");    value = 1;    ret = LinkListInitOrDestroy(linkListHeaderP, DataCreateFun);    ASSERT_RETURN(ret);    linkListHeaderP1 = LinkListAddNode(linkListHeaderP,      eLINK_LIST_ADD_TYPE_ADD_CHILD, DataCreateFun, &value);    /* Add. */    PRINTF("###\n");    currentNodeP = linkListHeaderP->childP;    for (indexI = eLINK_LIST_ADD_TYPE_ADD_Y_BROTHER;      indexI < eLINK_LIST_ADD_TYPE_MAX; indexI++)    {        PRINTF("###\n");        value++;        addType = (eLinkListAddType)indexI;        currentNodeP = LinkListAddNode(currentNodeP, addType, DataCreateFun, &value);    }    /* Add. */    PRINTF("###\n");    currentNodeP = linkListHeaderP->childP;    for (indexI = eLINK_LIST_ADD_TYPE_ADD_Y_BROTHER;      indexI < eLINK_LIST_ADD_TYPE_MAX; indexI++)    {    PRINTF("###\n");        value++;        addType = (eLinkListAddType)indexI;        currentNodeP = LinkListAddNode(currentNodeP, addType, DataCreateFun, &value);    }    LinkListDump(linkListHeaderP, DataDumpFun);    PRINTF("###\n");    /* find. */    value = 2;    tmpNodeP = LinkListFind(linkListHeaderP, DataFindFun, &value);    if (tmpNodeP == NULL)    {        PRINTF("###tmpNodeP == NULL\n");    }    else    {        LinkListNodeDump(tmpNodeP, DataDumpFun);    }    PRINTF("###\n");    /* find. */    value = 4;    tmpNodeP = LinkListFind(linkListHeaderP, DataFindFun, &value);    if (tmpNodeP == NULL)    {        PRINTF("###tmpNodeP == NULL\n");    }    else    {        LinkListNodeDump(tmpNodeP, DataDumpFun);        LiniListNodeDelete(tmpNodeP, DataDeleteFun);        PRINTF("###\n");    }    PRINTF("###\n");    LinkListDump(linkListHeaderP, DataDumpFun);    PRINTF("###\n");    LinkListInitOrDestroy(linkListHeaderP, DataDeleteFun);    PRINTF("###\n");    return (0);}#endif /* MIKETEST */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -