Przeróbka list

0

Wiem, że kolejny post, ale czy mógłby ktoś mi pomóc przerobić ten kod, który wrzuca wersy do jednej listy a powinien do listy dwukierunkowej (lista podwieszana z posortowanymi wersami).

#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <sstream>
using namespace std;
struct dane                  //struktura z danymi i wskaznikiem na nastepny element
{
    string godzina;
    string dzien;
    string grupa;
    string nazwisko;
    string przedmiot;
    dane* next;
dane*prev;

};
struct dane1
{
    dane* head, * tail;
};

typedef dane* lista;
lista glowa = NULL;
lista wsk = NULL;

void dodawanie(lista& glowa, string godzina, string dzien, string grupa, string nazwisko, string przedmiot) // dodawanie nowego elementu do listy
{
    glowa = new dane;
    glowa->godzina = godzina;
    glowa->dzien = dzien;
    glowa->grupa = grupa;
    glowa->nazwisko = nazwisko;
    glowa->przedmiot = przedmiot;

    glowa->next = wsk;
    wsk = glowa;

};

void zapisz(lista glowa)//zapisywanie listy do osobnego pliku
{

    lista kolejny;
    kolejny = glowa;
    while (kolejny != NULL)
    {
        fstream plik_wyjsciowy;
        plik_wyjsciowy.open(kolejny->nazwisko + ".txt", ios::out | ios::app);
        plik_wyjsciowy << kolejny->godzina << " ";
        plik_wyjsciowy << kolejny->dzien << " ";
        plik_wyjsciowy << kolejny->grupa << " ";
        plik_wyjsciowy << kolejny->przedmiot << endl;
        kolejny = kolejny->next;
    }
    cout << "\n";
};
void zwolnij(lista& glowa)
{
    lista pom;
    while (glowa != nullptr)
    {
        pom = glowa;
        glowa = pom->next;
        delete pom;
    }
}

void pierwszy(dane1& L, string dzien)
{
    dane* p;

    p = new dane;   // tworzymy nowy element
    p-> dzien = 'pon';
    p->prev = NULL;
    p->next = L.head;
    L.head = p;

    if (p->next) p->next->prev = p;
    else L.tail = p;
}

int main()
{

    ofstream plik;
    string sciezka;
    //cout << "Wpisz nazwe/sciezke do pliku zawierajcego dane:";      linie polecenia
    //cin >> sciezka;
    plik.open("plan.txt");
    if (plik.is_open())
    {
        string wers;
        string godzina, dzien, grupa, nazwisko, przedmiot;
        cout << "Plik wczytano poprawnie!" << endl;
        int liczby;
        string a, b;
        while (!plik.eof())
        {

            getline(plik, wers);
            istringstream is(wers);   //dzielenie wersu  na czesci 

            is >> godzina >> dzien >> grupa >> nazwisko >> przedmiot;
            if (dzien = 'pon')
                pierwszy;

           // dodawanie(glowa, godzina, dzien, grupa, nazwisko, przedmiot);  //dodanie pobranych danych z pliku do listy

        }
    }
    else
    {
        cout << "Plik nie zostal wczytany, sprobuj ponownie" << endl;
    }

    zapisz(glowa);

    zwolnij(glowa);
    return 0;
}
0

W tamtym poście wrzuciłem linka do geeg4geeks z implementacją listy dwukierunkowej. Jak to C++, to można metodę kompozycji zastosować.

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