• 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++

VPS Starter Arubacloud
0 głosów
1,555 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,878 wizyt
pytanie zadane 5 stycznia 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 558 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...