Listy powiązane

0

Witam. Mam problem z listami powiązanymi. Koncepcję rozumiem , natomiast przykłady akurat w tym rozdziale dają mi nie jasne podejście do tworzenia i usuwania list powiązanych. W rozdziale również wspomniano o STL (standardowej bibliotece szablonów) o której będzie później. Nie lubię i nie chcę pozostawiać rozdziałów nie skończonych za sobą. Każdy rozdział ma zadania do wykonania. Czytałem różne przykłady (które niestety używają coś czego jeszcze nie przerabiałem) po Polsku i angielsku. I nadal gdzieś się gubię. Potrzebuję przykładu na moim poziomie.
Wszystko co potrafię w c++ mam wypisane w sygnaturce.
Treść zadania :
//Napisz program usuwający element z listy powiązanej. Funkcja usuwająca powinna przyjmować
// element tylko przeznaczony do usunięcia.
//**Podpowiedzi : a gdybyś miał wskaźnik wskazujący do poprzedniego węzła ?

Próbuje od tygodnia to zrobić korzystając z przykładów w książce. Wszystko poniżej sam pisałem.

#include <iostream>

struct list
{
    list* previousList;
    int date = 0;
    list* nextlist;
};
list* firstlist = NULL;
list* lastlist = NULL;
list* newlist( int x) // tworzenie nowej list./
{
    list* w_list = new list; //  tworzy pierwszy element naszej listy.
    w_list->nextlist = firstlist;// przypiwsywanie  wskaznik do nastepnej listy
    w_list->date += x; //podnoszenie danych.
    firstlist = w_list; // przypisanie aktualnej listy do firstlist.
   return w_list;
}
list* removelist(int d)
{
    list* actuallist = firstlist;
    while (actuallist->date!= NULL)
    {
        std::cout << actuallist->date;
        actuallist->nextlist;
        
        //std::cout << actuallist->date << std::endl;
    }
    return actuallist;
}
int main()
{
    int x = 0;
    int s = 1;
    
    while (s !=0)
    {
        std::cout << "Press 1 to Generate new list \n";
        std::cin >> s;

        switch (s)
        {
            case 1: // Tworzenie nowej listy i drukowanie.
            {
                x += 1;
                list* createdNewList = newlist(x);
                std::cout << createdNewList->date << std::endl;
                break;
            }
            case 2: // usuwanie listy.
            {
                int d = 0;
                std::cout << "Chose list number to delete : \n";
                std::cin >> d;
                x -= 1;
                removelist(d);
                break;
            }
        }
    }
    
}
0

Przenalizuj to:
https://4programmers.net/Forum/C_i_C++/330564-usuwanie_konkretnego_elementu_z_listy_jezyk_c?p=1617191#id1617191
Tam jej napisałem usuwanie elementu z single linked list, co prawda w C i funkcja, oprócz elementu do usunięcia, przyjmuje jeszcze wskaźnik na poczatek listy (C nie jest obiektowe) - ale to łatwo przerobić.
Dziwną Masz tę listę, dwa wskaźniki, jakby miała to być double linked, ale nie Wykorzystujesz tego, może jednak chodziło o single, to powyższe rozwiązuje problem.
Przykładowe źródło: https://www.cs.bu.edu/teaching/c/linked-list/delete/

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