Serializace binárního stromu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Serializace binárního stromu – C / C++ – Fórum – Programujte.comSerializace binárního stromu – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
nickan0
Duch
2. 5. 2017   #1
-
0
-

Zdravím všechny, potřeboval bych pomoct s jedním příkladem se kterým si nevím rady. Mám udělat binární strom pomocí ukazatelů, jehož strukturu uložím do souboru a potom ze souboru zase vytvořím strukturu toho stromu (serializace a deserializace stromu) + ověřím, že ta struktura ze souboru je vytvořena. Jak serializace, tak deserializace fungují, ale bylo mi řečeno, že mám jinak pracovat se souborem - nepoužívat fprintf,fopen,fclose,fscanf (předpokládám, že to mám udělat přes ifstream,ofstream??). Mohl by mi někdo pomoct, jak to tedy mám udělat? 

Serializaci jsem řešil pomocí přímého průchodu stromem, EMPTY -1 jsou potom prázdné vrcholy (rodiče nad nimi jsou listy stromu)

Kód: https://pastebin.com/PLU4nXQd

Děkuji za veškerou pomoc

Nahlásit jako SPAM
IP: 85.135.103.–
Jerry
~ Anonymní uživatel
512 příspěvků
4. 5. 2017   #2
-
-1
-
Mimo téma

Nikdo neporadí ? Nikdo nezná řešení této typické školní ulohy pro začátečníky ? Ani GNA "bez píčovin" ?

TO je moc divný ... Nickan přeci potřebuje pomoct ....

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:dc97:...–
KIIV
~ Moderátor
+43
God of flame
4. 5. 2017   #3
-
+1
-
Zajímavé

Je to psane proceduralnim pristupem. Vyhodit iostream, using a new, tak je z toho typicke reseni v C. Byt tebou, tak to ani neprepisuju, proste zacnu novou variantou za pouziti trid.

Potrebujes prinejmensim metody:  insert, find. Serializace se normalne dela pomoci iteratoru, ale tezko rici, jestli to das dohromady.

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jerry
~ Anonymní uživatel
512 příspěvků
4. 5. 2017   #4
-
0
-

#1 nickan
Hurá někdo přispěl :)

No tady je to popsaný moc hezky

http://stackoverflow.com/questions/234724/is-it-possible-to-serialize-and-deserialize-a-class-in-c

https://isocpp.org/wiki/faq/serialization

a je  na to aj knihovna

http://www.boost.org/doc/libs/1_63_0/libs/serialization/doc/tutorial.html

a tady sou příklady

https://gist.github.com/codemonkey85/5860625

http://www.ocoudert.com/blog/2011/07/09/a-practical-guide-to-c-serialization/

je tu ale drobný problém, ty nepíšeš jaký strom to je ono jich je mnoho a některé stromy je lepší převézt z paměťového modelu na deterministický stavový model (DSM) a teprve pak serializovat protože to stejně jinak nejde. DSM je sice redundantní struktura ke stromu, ale je vede k efektivnímu kodu.

.... ano serializace (uložení na disk) lze provést při procházení stromu (což je jednoduché) pak ho smažeš a při deserializaci ho zase vytvoříš.

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:dc97:...–
Jerry
~ Anonymní uživatel
512 příspěvků
4. 5. 2017   #5
-
0
-

#1 nickan
a hele tady to máš hotový:

https://askmecode.wordpress.com/2012/08/15/serializationdeserialization-of-a-binary-tree/

no neni to bomba ? ...

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:1564:...–
gna
~ Anonymní uživatel
1891 příspěvků
4. 5. 2017   #6
-
0
-

#4 Jerry
Je to ten strom, na který odkazuje. A VŮBEC NA TOM NEZÁLEŽÍ.

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 5. 2017   #7
-
+1
-
Zajímavé

#1 nickan 

ifstream is("in.txt");
if (!is.is_open())
	chyba
if (!(is >> val))
	chyba
is.close();

ofstream os("out.txt");
if (!os.is_open())
	chyba
if (!(os << val << " "))
	chyba
os.close()

Do funkcí ty streamy předávej jako referenci.

Nahlásit jako SPAM
IP: 213.211.51.–
nickan0
Duch
5. 5. 2017   #8
-
0
-

Díky moc, už mi to funguje.

Nahlásit jako SPAM
IP: 85.135.103.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý