📄 linklist.cpp
字号:
// LinkList.cc// author: Ke Song based C source from pp Sister XiuJie Chen ;)// http://kesongemini.diy.163.com#include "stdafx.h"#include <iostream.h>#include <stdlib.h> // exit#include "LinkList.h"void LinkList_T::init( void ){ _top = (LinkListNode_T *)this; _bottom = (LinkListNode_T *)this; _current= (LinkListNode_T *)this;}voidLinkList_T::prepend( CONTENTS contents ){ LinkListNode_T *pNode = new LinkListNode_T; if (pNode == NULL) { panic("prepend: new failed"); } else { pNode->prev = (LinkListNode_T *)this; pNode->next = _top; if( _bottom == (LinkListNode_T *) this ) _bottom = pNode; _top->prev = pNode; _top = pNode; // I don't want bearing operands' order in mind // So don't use " A = B = C " pNode->contents = contents; }}voidLinkList_T::append( CONTENTS contents ){ LinkListNode_T *pNode = new LinkListNode_T; if (pNode == NULL) { panic("append: new failed"); } else { pNode->prev = _bottom; pNode->next = (LinkListNode_T *)this; if (_top == (LinkListNode_T *)this) _top = pNode ; _bottom->next = pNode; _bottom = pNode; pNode->contents = contents; }}CONTENTSLinkList_T::deleteFirst( void ){ LinkListNode_T *pNode = _top; CONTENTS contents; if (pNode == (LinkListNode_T *)this) return ((CONTENTS)NULL); _top = pNode->next; _top->prev = (LinkListNode_T *)this; if (_current == pNode) _current = pNode->next; contents = pNode->contents; delete pNode; pNode = NULL; return contents;}CONTENTSLinkList_T::deleteLast( void ){ LinkListNode_T *pNode = _bottom; CONTENTS contents; if (pNode == (LinkListNode_T *)this) return ((CONTENTS)NULL); _bottom = pNode->prev; _bottom->next = (LinkListNode_T *)this; if (_current == pNode) _current = pNode->prev; contents = pNode->contents; delete pNode; pNode = NULL; return contents;}CONTENTSLinkList_T::deleteCurrent( void ){ LinkListNode_T *pNode = _current; CONTENTS contents; if (pNode == (LinkListNode_T *)this) return ((CONTENTS)NULL); _current = pNode->next; pNode->prev->next = pNode->next; pNode->next->prev = pNode->prev; contents = pNode->contents; delete pNode; pNode = NULL; return contents;}voidLinkList_T::append2current( CONTENTS contents ){ LinkListNode_T *pNode = new LinkListNode_T; if (pNode == NULL) { panic("append2Current: new failed"); } else { pNode->prev = _current; pNode->next = _current->next; pNode->contents = contents; _current->next->prev = pNode; _current->next = pNode; }}voidLinkList_T::prepend2current( CONTENTS contents ){ LinkListNode_T *pNode = new LinkListNode_T; if (pNode == NULL) { panic("prepend2Current: new failed"); } else { pNode->prev = _current->prev; pNode->next = _current; pNode->contents = contents; _current->prev->next = pNode; _current->prev = pNode; }}voidLinkList_T::deleteAll( void ){ while (!isEmpty()) deleteFirst();}voidLinkList_T::freeAll( void ){ while (!isEmpty()) delete deleteFirst();}voidLinkList_T::freeCurrent( void ){ delete deleteCurrent();}boolLinkList_T::freeMatch ( CONTENTS contents ){ LinkListNode_T *pNode; for(pNode = _top; pNode != (LinkListNode_T *)this; pNode = pNode->next) { if (pNode->contents == contents) { freeNode(pNode); return true; } } return false;}LinkListNode_T* LinkList_T::findMatch(CONTENTS contents){ LinkListNode_T *pNode; for(pNode = _top; pNode != (LinkListNode_T *)this; pNode = pNode->next) { if (pNode->contents == contents) return pNode; } return (LinkListNode_T *)NULL;}intLinkList_T::index ( CONTENTS contents ){ LinkListNode_T *pNode; int index = 0; for(pNode = _top; pNode != (LinkListNode_T *)this; pNode = pNode->next, index++) { if (pNode->contents == contents) return index; } return -1;}CONTENTSLinkList_T::contents( int index ){ LinkListNode_T *pNode; int count = 0; for(pNode = _top; pNode != (LinkListNode_T *)this; pNode = pNode->next, count++) { if (count == index) return pNode->contents; } return (CONTENTS)NULL; // (CONTENTS)-1 //old}voidLinkList_T::freeNode(LinkListNode_T *pNode){ delete deleteNode(pNode);}CONTENTSLinkList_T::deleteNode(LinkListNode_T *pNode){ CONTENTS contents; if (pNode == (LinkListNode_T *)this) { return ((CONTENTS)NULL); } else if (pNode == _current) { return deleteCurrent(); } else { pNode->prev->next = pNode->next; pNode->next->prev = pNode->prev; contents = pNode->contents; delete pNode; return contents; }}void LinkList_T::panic ( char *s ) //static{ cout<<s<<endl; exit(1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -