PDA

View Full Version : [C++] problema stack, funzione push


Cory
12-02-2009, 11:42
Sto lavorando a uno stack ed ho un problema: ho implementato la funzione push per inserire elementi nello stack ma succede una cosa strana: la chiamo n volte per aggiungere n elementi, ma mi funziona solo la prima! vi copio il codice di seguito..

questa è la definizione dello stack in stack.h

struct stack{

int dim;
int elementi[MAX];
};


e questa è la funzione push in stack.cc
retval push (int n, stack & s){

retval res;
if (isfull(s))
res=FAIL;
else {
s.elementi[s.dim++]=n;
res=OK;
}
return res;
}

nel main io chiamo la funzione push 3 volte
int main(){

stack s;
inizializza(s);

push(4, s);
push(5, s);
push(3,s);
stampa(s);
cout << s.dim << endl;


ma compilando e lanciando il programma il terminale mi da come risultato

4
1 // la dimensione dello stack

uhm cioè, non capisco perchè...se funziona una volta dovrebbe funzionare anche le altre..:muro:

Cory
12-02-2009, 16:12
:help:

Vincenzo1968
12-02-2009, 16:29
Posta il codice delle funzioni inizializza, isfull e stampa.

Cory
12-02-2009, 17:01
void inizializza(stack & s){
s.dim=0;
}


bool isfull(stack & s){

if(s.dim==MAX)
return true;
}


void stampa(stack & s){

for(int i=0; i<s.dim; i++)
cout << s.elementi[i] << endl;
}

Vincenzo1968
12-02-2009, 19:15
La funzione isfull deve ritornarte false se lo stack non è pieno:

Cosi funziona:


#define MAX 100
#define FAIL 0
#define OK 1

typedef int retval;

struct stack
{
int dim;
int elementi[MAX];
};


void inizializza(stack &s)
{
s.dim = 0;
}

bool isfull(stack &s)
{
if( s.dim == MAX )
return true;

return false;
}

void stampa(stack &s)
{
for(int i = 0; i < s.dim; i++)
cout << s.elementi[i] << endl;
}

retval push (int n, stack &s)
{
retval res;
if (isfull(s))
res = FAIL;
else
{
s.elementi[s.dim++] = n;
res = OK;
}

return res;
}

int main()
{
stack s;
inizializza(s);

push(4, s);
push(5, s);
push(3,s);
stampa(s);

cout << "Dimensione: " << s.dim << endl;
}


Output:


4
5
3
Dimensione: 3