Created
September 10, 2016 15:48
-
-
Save Soulstorm50/c8c2316a9d09f2a4b21ff278b629f567 to your computer and use it in GitHub Desktop.
TemplList
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include <iostream> | |
using namespace std; | |
template <typename T> | |
class TemplList | |
{ | |
public: | |
struct Elem | |
{ | |
T data; | |
Elem* next; | |
Elem* prev; | |
}; | |
private: | |
Elem *Head, *Tail; | |
int length; | |
public: | |
TemplList() | |
{ | |
Head = Tail = nullptr; | |
length = 0; | |
} | |
~TemplList() | |
{ | |
DelAll(); | |
} | |
int GetLength() | |
{ | |
return length; | |
} | |
void AddTail(int n) | |
{ | |
Elem* temp = new Elem(); | |
temp->next = nullptr; | |
temp->data = n; | |
temp->prev = Tail; | |
if (Tail != nullptr) Tail->next = temp; | |
if (length == 0) Head = Tail = temp; | |
else Tail = temp; | |
length++; | |
} | |
void AddHead(int n) | |
{ | |
Elem * temp = new Elem(); | |
temp->prev = nullptr; | |
temp->data = n; | |
temp->next = Head; | |
if (Head != nullptr) Head->prev = temp; | |
if (length == 0) Head = Tail = temp; | |
else Head = temp; | |
length++; | |
} | |
void Del(int pos) | |
{ | |
if (pos < 1 || pos > length) | |
throw "Incorrect position"; | |
int i = 1; | |
Elem * Del = Head; | |
while (i < pos) | |
{ | |
Del = Del->next; | |
i++; | |
} | |
Elem * PrevDel = Del->prev; | |
Elem * AfterDel = Del->next; | |
if (PrevDel != nullptr && length != 1) | |
PrevDel->next = AfterDel; | |
if (AfterDel != nullptr && length != 1) | |
AfterDel->prev = PrevDel; | |
if (pos == 1) Head = AfterDel; | |
if (pos == length) Tail = PrevDel; | |
delete Del; | |
length--; | |
} | |
void DelAll() | |
{ | |
while (length != 0) | |
{ | |
Del(1); | |
} | |
} | |
Elem* GetElem(int pos) | |
{ | |
if (pos < 1 || pos > length) | |
throw "Incorrect position"; | |
Elem *temp = Head; | |
int i = 1; | |
while (i < pos && temp != nullptr) | |
{ | |
temp = temp->next; | |
i++; | |
} | |
if (temp == nullptr) return nullptr; | |
return temp; | |
} | |
void ShowList()//this function is used for debugging, possible to use only if T is of basic type or operator<< is overloaded | |
{ | |
if (!length) | |
return; | |
Elem* temp = Head; | |
while (temp) | |
{ | |
cout << temp->data << " "; | |
temp = temp->next; | |
} | |
cout << endl; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment