Forum » Programiranje » [C++ naloga] seznam
[C++ naloga] seznam
Svizec69 ::
Imam bolj malo izkušenj s c++, zato bi prosil če lahko kdo prilepi kakšen košček kode kako recimo narediti dinamični seznam, ki vsebuje elemente različnega tipa.
Torej koliko sam razumem moram narediti template, ki pač zajema vse tipe. Potem pa različne funkcije vstavi, vrni, brisi. Bi lahko kdo prilepil kakšen primer kode mogoče samo za eno funkcijo, da vidim kako potem razijati naprej, res bi mi zelo koristlo, da bi imel vsaj začetek, ker se še najbolj ne znajdem v tem c++.
Al pa vsaj kakšen tutorial al pa link do tega dinamičnega seznama s template. Ker template pa moram uporabiti.
Hvala.
Torej koliko sam razumem moram narediti template, ki pač zajema vse tipe. Potem pa različne funkcije vstavi, vrni, brisi. Bi lahko kdo prilepil kakšen primer kode mogoče samo za eno funkcijo, da vidim kako potem razijati naprej, res bi mi zelo koristlo, da bi imel vsaj začetek, ker se še najbolj ne znajdem v tem c++.
Al pa vsaj kakšen tutorial al pa link do tega dinamičnega seznama s template. Ker template pa moram uporabiti.
Hvala.
- spremenilo: snow ()
m4r3 ::
hm
imam nekaj vaj posl mi email na markopart at gmail.com da ti pošlem. So od najbolj osnovne vaje.
imam nekaj vaj posl mi email na markopart at gmail.com da ti pošlem. So od najbolj osnovne vaje.
Backup22 ::
Narediš 2 *.h datoteki (seznam in vozlišče).
Seznam:
Vozlišče:
Pod definicjo seznama (seznam.h) pa implementiraš vse metode. Pomaga, če imaš zraven kulico in papir in si zraven rišeš vozlišča in povezave (kazalce). Evo ti primer:
Toplo priporočam, da nalogo narediš sam (je osnova) - to ti bo kasneje veliko bolj pomagalo kot uporaba naloge nekoga drugega... Če te kaj zanima, vprašaj!
Seznam:
#include <iostream> #include <cstdlib> #include "vozlisce.h" #ifndef _SEZNAM_H_ #define _SEZNAM_H_ template <class T> class seznam { protected: vozlisce<T>* k_zacetek; int dolzina; public: seznam(); // konstruktor seznam(const seznam&); // kopirni konstruktor ~seznam(); // destruktor void vstavi(int, const T&); // vstavi na konec void vrini(int, const T&); // vrine za zeljeno mesto void brisi(int); T vrni(int) const; int isci(const T&) const; bool prazen() const; int velikost() const; }; #endif
Vozlišče:
#include <iostream> #ifndef _VOZLISCE_H #define _VOZLISCE_H template <class T> class vozlisce { public: vozlisce(){} vozlisce(const T& p, vozlisce *n=0); ~vozlisce() {} T podatek; vozlisce *k_naslednji; }; template <class T> vozlisce<T>::vozlisce(const T& p, vozlisce *n){ podatek = p; k_naslednji = n; }; #endif
Pod definicjo seznama (seznam.h) pa implementiraš vse metode. Pomaga, če imaš zraven kulico in papir in si zraven rišeš vozlišča in povezave (kazalce). Evo ti primer:
template <class T> void seznam<T>::vstavi(int mesto, const T& podatek) { vozlisce<T>* k_pomozni = k_zacetek; // naredimo pomozni kazalec, ki kaze na zacetek int index = 0; if((mesto < 0) || (mesto > dolzina)) // pogoji return; for(int i=0; i<mesto; i++) { k_pomozni = k_pomozni->k_naslednji; // "sprehajanje" do mesta za vstavit } k_pomozni->podatek = podatek; }
Toplo priporočam, da nalogo narediš sam (je osnova) - to ti bo kasneje veliko bolj pomagalo kot uporaba naloge nekoga drugega... Če te kaj zanima, vprašaj!
//
Svizec69 ::
najlepša hvala. Ja saj tak se hočem naučit te kazalce in sezname, tako da mi je to dobrodošlo za v pomoč, itak pa bom probal sam sprogramirat s pomočjo tega kar si napisal.
Še enkrat hvala.
Še enkrat hvala.
Backup22 ::
Ni problema.
Ko delaš imej v glavi, da je najboje tisto, kar je enostavno. Ne komplicirat, ampak razmišljaj "po domače". Npr. če hočeš peti elemt brisat, se z npr. while zanko pač sprehodiš do vozlišča pred brisanim (k_začetek imaš vedno dan) in preko vozlišča povežeš kazalce (ne rabiš fizično brisat vozlišča). Po domače povedano k_next iz četrtega vozlišča kar povežeš na šestega (tako petega več ni).. Good luck ;)
Ko delaš imej v glavi, da je najboje tisto, kar je enostavno. Ne komplicirat, ampak razmišljaj "po domače". Npr. če hočeš peti elemt brisat, se z npr. while zanko pač sprehodiš do vozlišča pred brisanim (k_začetek imaš vedno dan) in preko vozlišča povežeš kazalce (ne rabiš fizično brisat vozlišča). Po domače povedano k_next iz četrtega vozlišča kar povežeš na šestega (tako petega več ni).. Good luck ;)
//
bozjak ::
če boš tako brisal (vrjetno boš, po moje je najbolj enostavno) ne pozabi elementa vseeno izbrisati, če le prevežeš vozlišča potem elementa res ne bo več v seznamu, a prostor v pomnilniku pa bo vseeno zasdeal naprej.
lp
lp
http://upor.blogec.si
http://bozjak.deviantart.com
http://bozjak.deviantart.com
Keki ::
Jaz bi skor reko, da more on to nalogo rešit s strukturami in kazalci, ne pa z razredi. Vsaj ponavadi je to v sklopu te snovi.
http://www.alfakan.si/
http://mihajerot.si/
http://mihajerot.si/
Backup22 ::
Ja pa sej razred je skoraj isto kot struktura. Mislim, da je v strukturi vse po defaultu public, v classu pa private.
//
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] Iskalno drevo implementacijaOddelek: Programiranje | 2260 (1818) | eXoo |
» | [c++]SeznamOddelek: Programiranje | 2644 (2644) | Gundolf |
» | [C++] Linker errorOddelek: Programiranje | 1279 (1279) | Quikee |
» | pomoc pri skladuOddelek: Programiranje | 1313 (1238) | NoUse4AName |
» | [C++] NULL: Undeclared identifier - HELP!Oddelek: Programiranje | 1213 (1151) | CCfly |