pplinknode.cpp

来自「基于ARM平台的控制系统,自己带有MINIGUI,可以直接在VC下运行界面演示程」· C++ 代码 · 共 159 行

CPP
159
字号
#include "wnd.h"

char * CLinkListNode::GetNodeDataFieldString(int nFieldIndex,char * pBuffer,int nBuffSize)
{
    return pBuffer;
}
CLinkListNode::CLinkListNode()
{
    pPrevNode = NULL;
    pNextNode = NULL;
}
CLinkListNode::~CLinkListNode()
{
    
} 

int CLinkListNode::IsFinalNode(void)
{
    return (pNextNode==NULL);
}

int CLinkListNode::GetStepsTo(CLinkListNode * pNode)
{
    int nDis;
    CLinkListNode * pCurNode = this;
    for(nDis=0;(pCurNode->pNextNode) && (pCurNode != pNode) ;nDis++)
    {
        pCurNode = pCurNode->pNextNode;
    }
    
    if(pCurNode == pNode)
    {
        return nDis;
    }
    
    return INVALID_DISTANCE;
}

CLinkListNode * CLinkListNode::GetNextNode(int nStep)
{
    CLinkListNode * pCurNode;
    
    pCurNode = this;
    
    for(int i=0;i<nStep && pCurNode->pNextNode;i++)
    {
        pCurNode = pCurNode->pNextNode;
    }
    return pCurNode;
}

CLinkListNode * CLinkListNode::GetPrevNode(int nStep)
{
    CLinkListNode * pCurNode;
    
    pCurNode = this;
    
    for(int i=0;i<nStep && pCurNode->pPrevNode;i++)
    {
        pCurNode = pCurNode->pPrevNode;
    }
    
    return pCurNode;
}

void CLinkListNode::InsertAfter(CLinkListNode *pNewNode)
{
    DEBUG_Assert(pNewNode != NULL);
    //处理后节点
    if(pNewNode)
    {
        pNewNode->pNextNode = pNextNode;
        if(pNewNode->pNextNode)
        {
            pNewNode->pNextNode->pPrevNode = pNewNode;
        }
    }
    //处理前节点
    pNextNode = pNewNode;
    if(pNewNode)
    {
        pNewNode->pPrevNode = this;
    }
}

void CLinkListNode::InsertBefore(CLinkListNode *pNewNode)
{
    DEBUG_Assert(pNewNode != NULL);
    if(pPrevNode)
    {
        pPrevNode->InsertAfter(pNewNode);
    }
}

void CLinkListNode::RemoveMe(void)
{
    if(pNextNode)
    {
        pNextNode->pPrevNode = pPrevNode;
    }
    if(pPrevNode)
    {
        pPrevNode->pNextNode = pNextNode;
    }
}

CLinkListNode* CLinkList::GetLastNode(void)
{
    CLinkListNode* pNode;
    pNode = w_pRoot;
    while(!pNode->IsFinalNode())
    {
        pNode = pNode->GetNextNode(1);
    }
    return pNode;
}

CLinkList::CLinkList(void)
{
    w_pRoot = new CLinkListNode;
    w_nNodeNumber = 0;
}


void CLinkList::Append(CLinkListNode * pListNode)
{
    CLinkListNode * pLastNode;
    DEBUG_Assert(pListNode != NULL);
    if(pListNode)
    {
        pLastNode = GetLastNode();
        pLastNode->InsertAfter(pListNode);
        w_nNodeNumber ++;
    }
}

CLinkListNode * CLinkList::GetLinkListNode(int nIndex)
{
    DEBUG_Assert(nIndex<w_nNodeNumber);
    return (w_pRoot->GetNextNode(nIndex+1));
}

CLinkListNode * CLinkList::RemovelLinkListNode(int nIndex)
{
    CLinkListNode * pNode;
    DEBUG_Assert(nIndex<w_nNodeNumber);
    pNode = w_pRoot->GetNextNode(nIndex + 1);
    if(pNode)
    {
        pNode->RemoveMe();
    }
    return pNode;
}

int CLinkList::GetNodeNumber(void)
{
    return w_nNodeNumber;
}

⌨️ 快捷键说明

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