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

📄 linkedlist.h

📁 魔兽世界的私服源程序
💻 H
字号:
#ifndef _LINKEDLIST_H_
#define _LINKEDLIST_H_

#include "LinkedNode.h"

template<class TYPE>
class LinkedList {
    wxUint16            Count;
    LinkedNode<TYPE>   *First;
    LinkedNode<TYPE>   *Last;
    public:
        LinkedList (void) { First = Last = 0; Count = 0; }
        ~LinkedList (void) {
            LinkedNode<TYPE> *node = First;
            while (node && node->Next) {
                if (node->Previous)
                    delete node->Previous;
                node = node->Next;
            }
            delete node;
        }

        LinkedNode<TYPE> *FindByIndex (wxUint16 i) {
            if (i < int(Count/2)) {
                LinkedNode<TYPE> *node = First;
                while (node && node->Index != i)
                    node = node->Next;

                return node;
            } else if (i >= int(Count/2)) {
                LinkedNode<TYPE> *node = Last;
                while (node && node->Index != i)
                    node = node->Previous;

                return node;
            } else // This wont happen - just to remove compiler warnings.
                return NULL;
        }

        LinkedNode<TYPE> *FindByData (TYPE Find) {
            for (LinkedNode<TYPE> *node = First; node; node = node->Next) {
                if (*node->GetData() == Find)
                    return node;
            }

            return NULL;
        }

        LinkedNode<TYPE> *FindByPtr (TYPE *Find) {
            for (LinkedNode<TYPE> *node = First; node; node = node->Next) {
                if (node->GetData() == Find)
                    return node;
            }

            return NULL;
        }
        

        wxUint16 GetCount (void) { return Count; }

        LinkedNode<TYPE> *GetFirst  (void) { return First; }
        LinkedNode<TYPE> *GetLast   (void) { return Last; }

        void Append (TYPE *NewData) {
            if (!First && !Last)
                First = Last = new LinkedNode<TYPE>(NewData);
            else
                Last = Last->Next = new LinkedNode<TYPE>(NewData, Last);

            Count++;
        }

        void DeleteNode (LinkedNode<TYPE> *Del) { 
            if (Del == First && Del == Last)
                Last = First = NULL;
            else if (Del == First && Del != Last)
                First = First->Next;
            else if (Del != First && Del == Last )
                Last = Last->Previous;

            if (Del->Next)
                Del->Next->Previous = Del->Previous;
            if (Del->Previous)
                Del->Previous->Next = Del->Next;

            for (LinkedNode<TYPE> *node = Del->Next; node; node = node->Next)
                node->Index--;

            delete Del; Count--;
        }
};

#endif

⌨️ 快捷键说明

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