[C++] Zadanie na listach


(Lenamonika) #1

Witam.

Piszę, ponieważ mam problem z zadaniem(w załączniku) na programowanie. Problem polega na tym, że nie wiem jak wprowadzać nowe elementy do listy z konsoli (jako char lub int) i nie wiem co zrobić, aby program wykonywał czynności za które odpowiadają poszczególne litery. Jeżeli ktoś mógłby pomóc, to proszę,

Zadanie C++.doc


#2

Może najpierw napisz co już sam zrobiłeś i w którym momencie i z czym masz problem.


(Lenamonika) #3

#include

using namespace std;

struct grupa {
int a;
char b,c,d,e,f,g,h,i,j,k;
grupa *nastepna; // wskaźnik na następny element
grupa(); // konstruktor
};

grupa::grupa() {
nastepna = 0; // konstruktor
}

struct lista {
grupa *pierwsza; // wskaźnik na początek listy
void dodaj_grupa (char b, char c);
void usun_grupa (int nr);
void dodaj_liczbe (int a);
void wyswietl_wszystko ();
lista();
};

lista::lista() {
pierwsza = 0; // konstruktor
}

void lista::wyswietl_wszystko()
{
// wskaznik na pierszy element listy
grupa *wsk = pierwsza;

// przewijamy wskazniki na nastepne elementy
while (wsk)
{
      cout << wsk->b <<" " << wsk->c <<" "<< endl;
    wsk=wsk->nastepna;
}

}

void lista::usun_grupa (int nr)
{ // jezeli to pierwszy element listy
if (nr==1)
{
grupa *wsk = pierwsza;
pierwsza = wsk->nastepna; //poczatek listy, 1 el. wskazuje na 2 el. itd…
}
// jeżeli nie jest to pierwszy element
if (nr>=2)
{
int x = 1;
// do usuniecia srodkowego elemetnu potrzebujemy wskaznika na osobe n-1
// wskaznik *wsk bedzie wskaznikiem na osobe poprzedzajaca osobe usuwana
grupa *wsk = pierwsza;
while (wsk)
{ // sprawdzamy czy wskaznik jest na osobie n-1 niz usuwana
if ((x+1)==nr) break;

        // jezeli nie to przewijamy petle do przodu
        wsk = wsk->nastepna;
        x++;
    }        // wskaznik *wsk wskazuje teraz na osobe n-1
    // nadpisujemy wkaznik osoby n na osobe n+1
    // bezpowrotnie tracimy osobe n-ta

    // dodatkowo sprawdzamy czy aby nie jest to ostatni element
    // wtedy nalezy wyzerowac ostatni wskaznik
    if (wsk->nastepna->nastepna==0)
        wsk->nastepna = 0;

    // jezeli nie byl to ostatni element
    else
        wsk->nastepna = wsk->nastepna->nastepna;
}

}

void lista::dodaj_grupa(char b, char c)
{
grupa *nowa = new grupa; // tworzy nowy element listy

// wypełniamy naszymi danymi
nowa->b = b;
nowa->c = c;

if (pierwsza==0) // sprawdzamy czy to pierwszy element listy
{
    // jeżeli tak to nowy element jest teraz początkiem listy
    pierwsza = nowa;
}

else
{
    // w przeciwnym wypadku wędrujemy na koniec listy
    grupa *wsk = pierwsza;

    while (wsk->nastepna)
    {
        // znajdujemy wskaźnik na ostatni element
        wsk = wsk->nastepna;
    }

    wsk->nastepna = nowa;  // ostatni element wskazuje na nasz nowy
    nowa->nastepna = 0;     // ostatni nie wskazuje na nic
}

}
void lista::dodaj_liczbe(int a)
{
grupa *nowa = new grupa;
nowa->a = a;
if (pierwsza==0)
{
pierwsza = nowa;
}
else
{
grupa *wsk = pierwsza;
while (wsk->nastepna)
{
wsk = wsk->nastepna;
}
wsk->nastepna = nowa;
nowa->nastepna = 0;
}
}

int main()
{ int xd;
lista *baza = new lista; //tworzymy liste
cin>>xd;
//dodajemy rekordy do bazy
baza->dodaj_liczbe(2);
baza->dodaj_grupa(‘m’,‘p’);
baza->dodaj_grupa(‘a’,‘d’);
baza->dodaj_grupa(‘d’,’\0’);
baza->dodaj_grupa(‘a’,’\0’);
baza->dodaj_grupa(‘J’,’\0’);
baza->dodaj_grupa(‘J’,’\0’);
baza->dodaj_grupa(‘J’,’\0’);
baza->dodaj_grupa(’\0’,‘p’);
baza->dodaj_grupa(’\0’,‘p’);
baza->dodaj_grupa(’\0’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);
baza->dodaj_grupa(‘J’,‘p’);

baza->usun_grupa(1);
baza->usun_grupa(3);
baza->usun_grupa(4);

baza->wyswietl_wszystko();

delete (baza);

return 0;}

(Drobok) #4

Przeczytałeś tego posta ?

Skoro ogarniasz wskaźniki i listy to nie powinieneś mieć problemu z pobraniem ciągu znaków do zmiennej …


(Lenamonika) #5

A jednak mam problem i nie wiem jak


(kostek135) #6

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12