rottingham Temat założony przez niniejszego użytkownika |
R. 45 - zadanie domowe - ppkt. a - prośba o sprawdzenie » 2019-06-18 18:39:35 Cześć wszystkim! Wykonałem zadanie domowe z ppkt. a z rozdziału 45. Mam pytanie: czy zadanie jest dobrze zrobione? Czy na tym poziomie kursu można to zrobić lepiej? #include <iostream>
using namespace std;
struct Lista { Lista * ogon; int liczba; };
void wypisz( Lista * lista ) { if( lista ) { cout << lista->liczba << ", "; wypisz( lista->ogon ); } }
void dodajPoczatek( Lista *& lista, int liczba ) { Lista * nowy = new Lista; nowy->liczba = liczba; nowy->ogon = nullptr; if( lista ) { nowy->ogon = lista; lista = nowy; } else { lista = new Lista; lista = nowy; } }
void zniszcz( Lista *& lista ) { while( lista ) { Lista * tmp = lista; lista = lista->ogon; delete tmp; } lista = nullptr; }
int main() { int liczba; Lista * lista = nullptr; cout << "Podaj liczby, 0 lub blad konczy:\n"; while( cin >> liczba && liczba ) dodajPoczatek( lista, liczba ); cout << "Koniec, oto liczby:\n"; wypisz( lista ); zniszcz( lista ); }
|
|
pekfos |
» 2019-06-18 19:12:53 Mam dobry test na to, czy ktoś rozumie kod, który napisał w tym zadaniu: Jeśli dodajPoczatek() wygląda podobnie do dodajKoniec(), to znaczy że nie zrozumiał. U ciebie wygląda podobnie. Pomijam oczywiste błędy, jak podwójne alokowanie pamięci.
Czemu taki test? Bo dany w zadaniu kod do dodawania na koniec listy wygląda jak wygląda, bo dodawanie na koniec listy jest znacznie bardziej skomplikowane niż dodawanie na początek listy. Dodawanie na początek listy to 3 linie kodu, dodawanie na koniec listy to wyszukiwanie końca listy, jeśli lista nie jest pusta, a wtedy dopiero te 3 linie kodu. |
|
nanoant20 |
» 2019-06-19 18:01:20 Nie chcę zakładać nowego wątku, więc się doczepie tutaj Chciałbym zasięgnąć informacji. W zadaniu jest takie zdanie "Lista powinna wtedy zawierać liczby w przeciwnej kolejności i tak też je wypisać."
|
nie za bardzo je rozumiem, więc z ilustruje to może tak czy funkcja void dodajPoczatek( Lista *& lista, int liczba ); ma tak samo działać jak funkcja push_front() list.push_front(7); żebym dobrze zrozumiał, jeżeli w liscie (strukturze) znajdują się już elementy np. 1, 2, 3, 4, 5 to po wywołaniu funkcji dodajPoczatek() wpisuje kolejno, taki pseudo kod dodajPoczatek(lista,7) dodajPoczatek(lista,8) dodajPoczatek(lista,9) moja lista powinna wygladaæ tak: 9, 8, 7, 1, 2, 3, 4, 5 Zadanie już rozwiązałem, tylko chcę się upewnić, czy o taki wynik (działanie programu) chodzi? |
|
pekfos |
» 2019-06-19 19:04:28 O to chodziło. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-06-19 21:15:16 Ok. Czyli - wolę dopytać dla pewności - funkcja dodajPoczątek powinna tak wyglądać? void dodajPoczatek( Lista *& lista, int liczba ) { Lista * nowy = new Lista; nowy->liczba = liczba; nowy->ogon = lista; lista = nowy; }
EDIT. dodawanie na koniec listy to wyszukiwanie końca listy, jeśli lista nie jest pusta, a wtedy dopiero te 3 linie kodu. |
Ale rozumiem, że da się to zrobić bez wyszukiwania końca listy? Bo chyba do tego sprowadza się ppkt b? |
|
pekfos |
» 2019-06-19 21:27:43 Kod jest poprawny. Dobrze rozumiesz, że się da. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-06-19 22:39:25 Problem rozwiązany, temat do zamknięcia.
Bardzo dziękuję za pomoc! |
|
« 1 » |