Z LIFO urobit FIFO – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Z LIFO urobit FIFO – C / C++ – Fórum – Programujte.comZ LIFO urobit FIFO – C / C++ – Fórum – Programujte.com

 

xXx
~ Anonymní uživatel
55 příspěvků
23. 10. 2010   #1
-
0
-

Zdravim,
vedel by mi niekto pomoct s prerobenim zasobnika na frontu? Source code zasobnika prikladam. Na googli je viac navodov, problem je v tom, ze v programe musim pouzit Uzol, ktoreho zdrojak tiez prikladam.
Vopred dakujem za vsetky zmysluplne rady!

#pragma once

class Uzol
{
private:
int aInfo;
public:
Uzol(int pInfo,Uzol *pDalsi);
~Uzol(void);
private:
Uzol *aDalsi;
public:

int Info(void)
{
return aInfo;
}

Uzol * Dalsi(void)
{
return aDalsi;
}
};


#include <stdlib.h>

#include "Uzol.h"

Uzol::Uzol(int pInfo,Uzol *pDalsi)
{
aInfo = pInfo;
aDalsi = pDalsi;
}


Uzol::~Uzol(void)
{
}


#pragma once

#include "Uzol.h"

class ZasobnikZ
{
private:
Uzol *aSP;
public:
ZasobnikZ(void);
~ZasobnikZ(void);
void Push(int info);
int Pop(void);
int Peek(void);
};


#include <stdlib.h>


#include "ZasobnikZ.h"


ZasobnikZ::ZasobnikZ(void)
{
aSP=NULL;
}


ZasobnikZ::~ZasobnikZ(void)
{
}

void ZasobnikZ::Push(int info)
{
aSP = new Uzol(info,aSP);
}

int ZasobnikZ::Pop(void)
{
int ret=0;
Uzol *pomuzol;
if(aSP!=NULL) {
ret = aSP->Info();
pomuzol = aSP->Dalsi();
delete aSP;
aSP= pomuzol;
}
return ret;
}

int ZasobnikZ::Peek(void)
{
return 0;
}

Nahlásit jako SPAM
IP: 95.170.227.–
liborb
~ Redaktor
+18
Guru
23. 10. 2010   #2
-
0
-

Stačí změnit Push, a to tak že dojedeš na konec seznamu a přidáš další Uzel s dalším nastaveným na NULL.

Nahlásit jako SPAM
IP: 195.189.142.–
xXx
~ Anonymní uživatel
55 příspěvků
23. 10. 2010   #3
-
0
-

Ale to mi tam tak ostane posledni prvok, ktory mal byt odobraty, nie? Ked iba pridam novy NULL uzol.

Nahlásit jako SPAM
IP: 109.236.114.–
liborb
~ Redaktor
+18
Guru
23. 10. 2010   #4
-
0
-

Teď si to měl tak, že držíš pointer na první prvek a nový přidáváš na začátek (uložíš si nový pointer), takže jako první vždy odebereš naposledy vložený. Aby si jako první odebral první vložený, tak ty nové musíš ukládat na konec.

Nahlásit jako SPAM
IP: 195.189.142.–
xXx
~ Anonymní uživatel
55 příspěvků
24. 10. 2010   #5
-
0
-

A nemohol by si mi prosim ta ukazat tu zmenu priamo na priklade v mojom kode?

Nahlásit jako SPAM
IP: 158.193.98.–
liborb
~ Redaktor
+18
Guru
26. 10. 2010   #6
-
0
-

Nejdříve potřebuješ ošetřit případ, že je aSP = NULL:

if (aSP == NULL)  aSP = new Uzol(info, NULL);


A následně pro každý další potřebuješ najít konec a vložit další (případně si držet pointer na poslední):


pomUzel = aSP;
while (pomUzel->aDalsi != NULL) pomUzel = pomUzel->aDalsi;
pomUzel->aDalsi = new Uzol(info, NULL);


Jenom je trochu "problém" v tom, že nebudeš moci přistupovat k aDalsi :). To lze vyřešit různě ... podle toho do čeho všeho můžeš zasahovat.

Nahlásit jako SPAM
IP: 78.80.52.–
xXx
~ Anonymní uživatel
55 příspěvků
27. 10. 2010   #7
-
0
-

Dakujem, ale este bude treba menit aj metodu Pop, ci nie?

Nahlásit jako SPAM
IP: 158.193.98.–
liborb
~ Redaktor
+18
Guru
27. 10. 2010   #8
-
0
-

Máš LIFO:



vkládání (na začátek):
1
2-1
3-2-1

odebírání (ze začátku):
2-1
1


a chceš z toho udělat FIFO, takže máš 2 možnosti, buď upravíš push:


vkládání (na konec):
1
1-2
1-2-3

odebírání (ze začátku):
2-3
3


nebo upravíš pop:


vkládání (na začátek):
1
2-1
3-2-1

odebírání (z konce):
3-2
3


ale pokud upravíš push i pop, tak dostaneš zase LIFO :).

Nahlásit jako SPAM
IP: 78.80.52.–
xXx
~ Anonymní uživatel
55 příspěvků
27. 10. 2010   #9
-
0
-

A ty si mi vlastne hore zmenil uz kod v tom Pop-e, ak som to dobre pochopil :)

Nahlásit jako SPAM
IP: 158.193.98.–
liborb
~ Redaktor
+18
Guru
27. 10. 2010   #10
-
0
-

Těsně vedle :), upravil jsem push.

Nahlásit jako SPAM
IP: 78.80.52.–
xXx
~ Anonymní uživatel
55 příspěvků
27. 10. 2010   #11
-
0
-

Uz mi to ide, dakujem ti. :)

Nahlásit jako SPAM
IP: 158.193.98.–
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, 84 hostů

Podobná vlákna

C++ , z LIFO na FIFO — založil Danndy

FIFO (front a zásobník) — založil ico222

Pmoc urobit program — založil juraj

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ý