Está en la página 1de 4

template <typename T>

struct node
{
T data;
node *next;
node()
{
next=NULL;
}
node(const T&data)
{
next=NULL;
this->data=data;
}
};
template <typename T>
class slist
{
node<T>*head;
node<T>*tail;
int length;
slist()
{
head=tail=NULL;
length=0;
}
public:
slist(const slist<T> &c) // operator de copiere
{
head = NULL;
tail = NULL;
length = c.lenght;
node<T>*c1 = c.head;
if (head != NULL)
{
head = new node<T>(c1->data);
tail = head;
c = c->next;
while (c != 0)
{
addtail(c->data);
c = c->next;
}
}
}
~slist() //Destructorul
{
node<T>*c = head;
while (head != 0)
{
head = head->next;
delete c;
c = head;
}
}
void addtail(const T & element) //Adaugarea unui element la finalul listei
{
node<T>*p = new node<T>(element);
if (tail=NULL)
{
tail = p;
head = p;
tail->next = NULL;
length++;
}
else
{
tail->next = p;
tail = p;
tail->next = NULL;
length++;
}
}
void addhead(const T & element) //Adaugarea unui element la inceputul listei
{
node<T>*p = new node<T>(element);
if (head = NULL)
{
tail = p;
head = p;
length++;
}
else
{
p->next = head;
head = p;
length++;
}
}
T searchh(const T &element) const // Cautarea unui element in lista
{
node<T>*c = head;
while (c != element)
{
c = c->next;
}
return c->data;
}
void removehead()
{node<T>*p=head;
head=head->next;
delete p;
length --;

}
void removetail()
{node<T>*p=head;
if(p->next->data!=tail->data)
{
p=p->next;
node<T>*s=tail;
tail=p;
p=tail;
delete p;
length--;
}
}

};
template <typename T>
class coada:public slist<T>
{
public:
void push(const T&data)
{
this->addtail(data);
}
T pop()
{
return this->removetail();
}

};
template <typename T>
class stiva:public slist<T>
{
public:
void push(const T&data)
{
this->addhead(data);
}
T pop()
{
return this->removehead();
}
};

int main()
{

return 0;
}

También podría gustarte