Proszę o konstruktywną krytykę mojej listy

0
#include <iostream>
#include <ctime> 
using namespace std;
class lista_jk
{
	private:
	//
		class cegla 
		{
			public:
				int dana;
				cegla *nast;
		};
	//
	cegla *korzen;
	cegla *ogon;
	cegla *wsk;
	public:
	lista_jk()
	{
		korzen=NULL;
		ogon=NULL;
		wsk=NULL;
	}
	
	bool dodaj(int war, int poz=-1)
	{
		wsk=korzen;
	  cegla *n = new cegla();
	  n->dana = war;
		
	  if(korzen==NULL)//pusta lista
	  {
	  	n->nast=NULL;
	  	korzen=ogon=n;
	  	return true;
	  }
	  
	  if(poz==0)//wstawianie przed listę
	  {
	  	n->nast=korzen;
	  	korzen=n;
	  	return true;
	  }

	  if(poz==-1)//wstawianie za listę
	  {
			wsk=ogon;
	  }
	  
	  else
			for(int i=1;poz>i;++i)//ustawianie pozycji
			{
				if(wsk==ogon)
				return false;
				
				wsk=wsk->nast;
			}
	  
	  
	  if(wsk==ogon)//wstawianie za listę
	  {
	  	n->nast=NULL;
			ogon->nast=n;
			ogon=n;
			return true;
	  }
	  
	  n->nast=wsk->nast; //wstawianie do listy
	  wsk->nast=n;
	  return true;
	}
	
	
	void wypisz()
	{
		wsk=korzen;
		for(int i=0;wsk!=NULL;++i)
		{
			cout<<"Pozycja:"<<i<<" Wartość:"<<wsk->dana<<endl;
			wsk=wsk->nast;
		}
	
	}
	
};

int main() 
{
	double roznica;
	cout.setf(ios::fixed);
	cout.precision(6);
	clock_t start, koniec;
	start=clock();


	lista_jk list;
	bool x=true;
	
	for(int i=0;i<100&&x==true;++i)
		x=list.dodaj(i,10);

	
	
	if(x==false)
		cout<<"Wypad z baru!"<<endl;
	else
		list.wypisz();
	
		koniec=clock();
		roznica=(koniec-start)/(double)CLOCKS_PER_SEC;
		cout<<"Czas wykonania:"<<roznica<<endl;
	
	return 0;
}

Wiem że, ta implementacja listy nie jest zbyt ładna, ale prosiłbym Was o krytykę i rady jak sprawić żeby była bardziej "fachowa".

1
  • Strasznie wielkie to wkładanie elementów do listy;
  • Nie masz zwalniania pamięci;
  • wsk jest niepotrzebne;
  • Tak naprawdę warto byłoby zrobić z tego template.
#include <iostream>
#include <string>
using namespace std;

class my_list
{
    struct element
    {
        string name;
        string surname;
        element *next;

        element(const string& name, const string& surname)
            : name(name), surname(surname), next(nullptr) {}
    };

    element *root;

public:
    my_list() : root(nullptr) {}

    ~my_list()
    {
        element *temp = root;
        while (temp)
        {
            element *current = temp;
            temp = temp->next;
            delete current;
        }
    }

    void print()
    {
        element *temp = root;
        while (temp)
        {
            cout << temp->name << " " << temp->surname << "\n";
            temp = temp->next;
        }
    }

    void add(const string& name, const string& surname)
    {
        element *el = new element(name, surname);
        el->next = root;
        root = el;
    }
};

int main()
{
    my_list list;
    list.add("Grzegorz", "G.");
    list.add("Tomasz", "T.");
    list.add("Michal", "T.");
    list.print();
    return 0;
}

PS: pisane na szybko. Mogłem się gdzieś machnąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1