Skip to content

Instantly share code, notes, and snippets.

@Soulstorm50
Created September 10, 2016 15:48
Show Gist options
  • Save Soulstorm50/c8c2316a9d09f2a4b21ff278b629f567 to your computer and use it in GitHub Desktop.
Save Soulstorm50/c8c2316a9d09f2a4b21ff278b629f567 to your computer and use it in GitHub Desktop.
TemplList
#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