Function description:
1.DLL constructor
2.DLL destructor
3.DLL Copy constructor
4.DLL operator=()
5.DLL copy()
6.DLL append()
7.DLL insert()
8.DLL remove()
8.DLL del()
//dll.cpp
//HYQ
//Mar 14, 2013
//Release v0.3
DLL::DLL(){
_head = _tail = _curr = 0;
}
DLL::~DLL(){
while (del());
}
DLL::DLL(DLL& D){//prevent copying
_head = _tail = _curr = 0;
copy(D);
}
DLL& DLL::operator=(DLL& D){
while (del());
copy(D);
return *this;
}
void DLL::copy(DLL& D){
int currPos;
for(currPos=0;D.goPrev();currPos++); // findout where is current
if (!D.isEmpty()) {
for(this->append(D.visit());D.goNext();this->append(D.visit()));
}
for(D.goHead(),this->goHead();currPos;D.goNext(),this->goNext(), currPos--); // set current to what it was before
}
void DLL::append(int data){// add after tail
Node* newNode = new Node(data, _tail);
if (_tail!=0){
_tail = _curr = _curr->_next = newNode;
}
else{
_head = _tail = _curr = newNode;
}
}
void DLL::insert(int data){// inserts data before current
Node* newNode = new Node(data,_curr->_prev,_curr);
if (!isEmpty()){
if (_curr->_prev){
_curr = _curr->_prev = _curr->_prev->_next = newNode;
}
else{
_head = _curr = _curr->_prev = newNode;
}
}
else{
_head = _tail = _curr = newNode;
}
}
int DLL::remove(){// remove the currect goes next if possible
int data = visit();
del();
return data;
}
bool DLL::del(){
bool ok;
if (ok = !isEmpty()){
Node* ToDel = _curr;
if (_curr->_next){//NextNode exists, current node is not tail
_curr->_next->_prev = _curr->_prev;
}
else{
_tail = _tail->_prev;
}
if (_curr->_prev){//current node is not head
_curr->_prev->_next = _curr->_next;
}
else{
_head = _head->_next;
}
if(_curr->_next){
_curr = _curr->_next;
}
else{
_curr = _curr->_prev;
}
delete ToDel;
}
return ok;
}
No comments:
Post a Comment