Originally Posted by
dudeomanodude
Ok, you have 86 lines to implement a singly-linked-list-doubly-linked-list-dynamic-array-queue-dequeue-stack template with circular-functionality.
CLinkedList.h
Code:
#include <windows.h>
#ifndef CLINKEDLIST_CLASS
#define CLINKEDLIST_CLASS
struct LINK {
LINK* Prev;
LINK* Next;
LPVOID pObject;
BOOL IsMasterLink;
};
class CLinkedList {
public:
LINK* MasterLink;
CLinkedList();
~CLinkedList();
BOOL Insert(LINK*);
BOOL Create(LPVOID);
BOOL Remove(LINK*);
BOOL Delete(LINK*);
};
#endif
CLinkedList.cpp
Code:
#include <windows.h>
#include "CLinkedList.h"
#define MAKE_LINK (LINK*)HeapAlloc(GetProcessHeap() , 0 , sizeof(LINK)
CLinkedList::CLinkedList(){
this->MasterLink = MAKE_LINK;
this->MasterLink->IsMasterLink = TRUE;
this->MasterLink->Next = this->MasterLink;
this->MasterLink->Prev = this->MasterLink;
this->MasterLink->pObject = NULL;
}
CLinkedList::~CLinkedList(){
LINK* pTemp;
LINK* pNext;
pTemp = this->MasterLink->Next;
while(!pTemp->IsMasterLink){
pNext = pTemp->Next;
this->Delete(pTemp);
pTemp = pNext;
}
this->Delete(this->MasterLink);
}
BOOL CLinkedList::Create(LPVOID pTarget){
LINK* pTemp;
pTemp = MAKE_LINK;
pTemp->IsMasterLink = FALSE;
pTemp->pObject = pTarget;
return this->Insert(pTemp);
}
BOOL CLinkedList::Insert(LINK* pLink){
LINK* pNext = this->MasterLink->Next;
LINK* pPrev = this->MasterLink;
pNext->Prev = pLink;
pPrev->Next = pLink;
pLink->Next = pNext;
pLink->Prev = pPrev;
return TRUE;
}
BOOL CLinkedList::Delete(LINK* pLink){
HeapFree(GetProcessHeap() , 0 , pLink->pObject);
return this->Remove(pLink);
}
BOOL CLinkedList::Remove(LINK* pLink){
pLink->Next->Prev = pLink->Prev;
pLink->Prev->Next = pLink->Next;
HeapFree(GetProcessHeap() , 0 , pLink);
return TRUE;
}
83 lines including whitespace which cboard stripped out on paste