PDA

View Full Version : [C++]Problema ricerca


Luc@s
21-09-2003, 14:32
Ho il seguente cod:

#include <iostream>
#include <string>
#include <cmath>
#include <cstdio>


using namespace std;

#ifndef LIST_H
#define LIST_H

// Liste bilaterale
struct lista
{
int data;
lista *next;
lista *prev;
};

void inizializza(lista ls);
lista *aggiungi(lista *ls, int n);
lista *cerca(lista *ls, int index, int mode=0);

void inizializza(lista *ls)
{
ls->data = 0;
ls->next = NULL;
ls->next = NULL;
}

lista *aggiungi(lista *ls, int n)
{
if(ls->prev == NULL){ // primo elemento
lista *tmp = ls;
tmp->data = n;
tmp->prev = ls;
tmp->next = NULL;
ls = tmp;
}
lista *tmp;
tmp->data = n;
tmp->prev = ls;
tmp->next = NULL;
ls->next = tmp;
return ls;
}

lista *cerca(lista *ls, int n, int mode)
{

lista* p = ls;
while( (p->next != NULL) && (p->data != n) ){
p = p->next;
}
return p;
}
#endif



//main.cpp

#include "list.h"

int main( )
{
lista *primo;
inizializza(primo);
aggiungi(primo, 8);
aggiungi(primo, 7);
aggiungi(primo, 6);
lista *trovato = cerca(primo, 3);
cout << "Elemento 3 == " << trovato->data;
cout <<endl;
system( "PAUSE" );
return 0;
}


Ma mi loopa all'infinito :cry:
Come posso risolvere?????


Tnk 10000

verloc
21-09-2003, 16:22
se devi imparare le strutture dati va bene...
se no usa la STL!!!! :D

Kleidemos
21-09-2003, 16:24
Originariamente inviato da verloc
se devi imparare le strutture dati va bene...
se no usa la STL!!!! :D


si ma questo nn mi aiuta a capire dove sbaglio:rolleyes:

mjordan
21-09-2003, 18:54
Originariamente inviato da Kleidemos
si ma questo nn mi aiuta a capire dove sbaglio:rolleyes:

Prova a sostituire "&&" con "||", So che non ha senso ma tempo fa mi capitò una cosa del genere pure a me. Non è una soluzione. E' una richiesta di prova.

mjordan
21-09-2003, 18:57
Aspetta che continuano ad esserci grossi errori. La funzione inizializza() non imposta il campo previous a qualcosa. Inoltre il primo nodo di una lista doppiamente concatenata dovrebbe avere un campo previous che punta a se stesso.

maxithron
22-09-2003, 00:13
Originariamente inviato da Luc@s
Ho il seguente cod:
[CODE]
void inizializza(lista *ls)
{
ls->data = 0;
ls->next = NULL;
ls->next = NULL;
}



Tnk 10000


non dovresti avere un prev anzichè 2 next a null?