» »

[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.
  • spremenilo: snow ()

m4r3 ::

hm
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:
#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.

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 ;)
//

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
http://upor.blogec.si
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/

Backup22 ::

Ja pa sej razred je skoraj isto kot struktura. Mislim, da je v strukturi vse po defaultu public, v classu pa private.
//

BigWhale ::

Ja, je skoraj isto. Ampak tudi precej drugace. ;>


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] Iskalno drevo implementacija

Oddelek: Programiranje
52260 (1818) eXoo
»

[c++]Seznam

Oddelek: Programiranje
142644 (2644) Gundolf
»

[C++] Linker error

Oddelek: Programiranje
51279 (1279) Quikee
»

pomoc pri skladu

Oddelek: Programiranje
51313 (1238) NoUse4AName
»

[C++] NULL: Undeclared identifier - HELP!

Oddelek: Programiranje
101213 (1151) CCfly

Več podobnih tem