Untitled
unknown
plain_text
4 years ago
3.8 kB
6
Indexable
#include <iostream>
#include <stdexcept>
template <typename tip>
class Lista{
public:
Lista() {}
virtual ~Lista() {}
virtual int BrojElemenata() const=0;
virtual tip& trenutni()=0;
virtual bool sljedeci()=0;
virtual bool prethodni()=0;
virtual void pocetak()=0;
virtual void kraj()=0;
virtual void obrisi()=0;
virtual void dodajIspred(const tip&)=0;
virtual void dodajIza(const tip&)=0;
virtual tip &operator[](int index)=0;
virtual const tip operator[](int index) const=0;
};
template <typename tip>
class NizLista : public Lista<tip>{
int kapacitet;
int duzina;
int tekuci;
tip **L;
public:
NizLista();
NizLista(const NizLista &lista){
kapacitet=lista.kapacitet;
tekuci=lista.tekuci;
duzina=lista.duzina;
L=new tip*[kapacitet];
for(int i=0; i<duzina; i++){
L[i]=new tip(*lista.L[i]);
}
}
~NizLista(){
for(int i=0; i<duzina; i++){
delete L[i];
}
delete []L;
}
NizLista &operator=(const NizLista &lista){
if(duzina!=0 && this!=&lista){
for(int i=0; i<duzina; i++){
delete L[i];
}
delete []L;
L=nullptr;
kapacitet=lista.kapacitet;
duzina=lista.kapacitet;
tekuci=lista.tekuci;
L=new tip*[kapacitet];
for(int i=0; i<duzina; i++){
L[i]=new tip(*lista.L[i]);
}
}
return *this;
}
int BrojElemenata() const override{
return duzina;
}
tip& trenutni() override{
return *L[tekuci];
}
bool sljedeci() override{
if(duzina==0) throw std::logic_error("Lista je prazna");
if(tekuci==duzina-1) return false;
if(tekuci<duzina) tekuci++;
return true;
}
bool prethodni() override{
if(duzina==0) throw std::logic_error("Lista je prazna");
if(tekuci!=0) return false;
tekuci--;
return true;
}
void pocetak() override{
if(duzina==0) throw std::logic_error("Lista je prazna");
tekuci=0;
}
void kraj() override{
if(duzina==0) throw std::logic_error("Lista je prazna");
tekuci=duzina;
}
void obrisi() override;
void dodajIspred(const tip& el) override;
void dodajIza(const tip& el) override;
};
template <typename tip>
NizLista<tip>::NizLista(){
kapacitet=1000;
duzina=0;
tekuci=0;
L=new tip*[kapacitet] {};
}
template <typename tip>
void NizLista<tip>::obrisi(){
if(duzina<=0) throw std::logic_error("Nema nista za brisati");
if(tekuci!=0 && tekuci!=duzina-1){
delete L[tekuci];
for(int i=tekuci; i<duzina-1; i++){
L[i]=L[i+1];
}
duzina--;
}
else if(tekuci==0){
delete L[tekuci];
duzina--;
}
else if(tekuci==duzina-1){
delete L[tekuci];
duzina--;
tekuci--;
}
}
template <typename tip>
void NizLista<tip>::dodajIspred(const tip &el){
if(duzina==0){
duzina++;
L[0]=new tip(el);
tekuci=0;
}
else if(duzina<tekuci){
}
}
template <typename tip>
void NizLista<tip>::dodajIza(const tip &el){
if(duzina==0){
duzina++;
L[0]=new tip(el);
tekuci=0;
}
}
int main() {
NizLista<int> niz;
for (int i(1); i<=10000; i++)
niz.dodajIspred(i);
std::cout << niz.brojElemenata() << " ";
for (int i(1); i<=10000; i++)
niz.obrisi();
std::cout << niz.brojElemenata();
return 0;
}
Editor is loading...