• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Linked list (lista łączona) - poprawna struktura w c++

Object Storage Arubacloud
0 głosów
1,602 wizyt
pytanie zadane 1 września 2018 w C i C++ przez Adam Jakś Dyskutant (8,940 p.)

Cześć!

Na studiach wymagane jest od nas zrobienie listy łączonej, oraz wykonywanie na niej operacji. Ponieważ duża waga jest przywiązywana do detali technicznych - chciałbym prosić o parę słów na temat podanej przez mnie struktury (szkieletu) listy tego typu. Czy wszystkie konstruktory, destruktory, zmienne początkowe etc. są napisane poprawnie i są dobrą bazą wyjścia do dodawania customowych metod i wykonywania dalszych operacji?

Plik nagłówkowy "lista.h"

#ifndef LISTA_H_INCLUDED
#define LISTA_H_INCLUDED

struct List {
    private:
        struct Node {
            int data;
            Node *next;
            Node(int _data, Node *_next = NULL) {
                data = _data;
                next = _next;
            }
        };
        Node *head, *tail;
        int counter;
    public:
        List();
        ~List();
        //customowe funkcje
};

#endif // LISTA_H_INCLUDED

Plik źródłowy "lista.cpp"

#include "lista.h"

List::List() {
    head = NULL;
    tail = NULL;
    counter = 0;
}

List::~List() {
    while(head != NULL) {
        Node *killer = head;
        head = head -> next;
        delete killer;
    }
    tail = NULL;
    counter = 0;
}

Listę wykorzystywać będę oczywiście w "main.cpp", np.

#include <iostream>
#include "lista.h"
using namespace std;

int main()
{
    List l1;
}

Dzięki!

1 odpowiedź

0 głosów
odpowiedź 2 września 2018 przez RafalS VIP (122,820 p.)
wybrane 2 września 2018 przez Adam Jakś
 
Najlepsza

Kod jest w miare ok, ale wydaje mi się, że w dziwny sposób podchodzisz do zadania :P. Nie rozumiem czemu destruktor miałby być szkieletem rozwiązania :D. Wg mnie lepiej byłoby najpierw naśmiecić, a jak już zobaczysz gdzie i jak zostalo naśmiecone to potem te śmieci zbierać. Nie na odwrót :D

Drobne poprawki, gdybym miał się bardzo czepiać:

Struct i class różnią się od siebie tylko domyślnym modyfikatorem dostępu i domyślnym typem dziedziczenia, ale w środowisku programistycznym utarło się, że struct jest wykorzystywany tam gdzie chcemy mieć taki pojemnik na dane bez żadnych metod. class List, struct Node.

List::List() {
    head = NULL;
    tail = NULL;
    counter = 0;
}

coś takiego nie jest warte definiowania konstruktora skoro o wiele czytelniej od C++11 można napisać tak:

class List {
private:
	Node * head = nullptr;
	Node* tail = nullptr;
	int counter = 0;
};
            Node(int _data, Node *_next = NULL) {
                data = _data;
                next = _next;
            }

W takim przypadku banalnego konstruktora czytelniej jest użyć listy inicjalizacyjnej i oczywiście definicje rzucić do pliku .cpp

List::Node::Node(int _data, Node *_next = NULL) : data(_data), next(_next) {}

Lista inicjalizacyjna implikuje proste przypisanie parametrów do składowych. Gdy widzisz kod w ciele konsturktora spodziewasz się logiki.

Generalnie nie powinno się zaczynać nazw identyfikatorów od podkreślenia, żeby uniknać kolizji z kompilatorem/bibliotekami. W przypadku inicjalizacji składowych parametrami o tych samych nazwach możesz do składowych dodawać jakiś prefix lub sufix. Osoboście spotkałem się z m_skladowa lub skladowa_. Wybierz jedną i trzymaj się tej konwencji.

Podobne pytania

0 głosów
0 odpowiedzi 1,941 wizyt
pytanie zadane 5 stycznia 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 575 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...