Oppure

Loading
04/01/12 9:39
JErikaM
Ciao a tutti :)
Prima di tutto, complimenti per il sito che mi è stato di grande aiuto più e più volte!
Avrei una cosa da chiedere riguardo ad un argomento di C che mi è stato assegnato come tesina per l'esame.
Devo occuparmi di "Ricerca in array di liste", devo quindi cercare se un elemento e indicare se è presente o meno.
Purtroppo con array di liste abbiamo lavorato pochissimo e non mi è ben chiaro come utilizzarle (la tesina invece solo sulle liste l'ho svolta senza problemi, avendo svolto molto l'argomento a lezione).
Per fare questa ricerca, creo la struttura della lista , un array di dimensioni note a mio piacere, ma per inserire all'interno di ogni cella dell'array la lista come devo fare?
E' lecito inserire il puntatore testa della lista all'interno della cella?
ci sono altri modi?

Grazie mille in anticipo :)
Ultima modifica effettuata da JErikaM 04/01/12 9:40
aaa
04/01/12 12:46
sarbaturino
La ricerca dentro una lista, la dovresti fare con il metodo forza bruta..
Cioè partire dal primo o ultimo elemento e scorrere tutta la lista sino a quando non si verifichi la condizione di uguaglianza con l'elemento da te cercato..

aaa
04/01/12 12:56
pierotofy
Solitamente si, inserisci le teste delle liste negli elementi dell'array... se poi la lista e' doppiamente collegata potresti anche mettere qualsiasi elemento della lista come elemento nell'array, ma tutto dipende da cosa ci devi fare...

La ricerca dipende da come e' organizzata la struttura, se e' ordinata...
Il mio blog: piero.dev
04/01/12 13:11
JErikaM
Postato originariamente da pierotofy:

Solitamente si, inserisci le teste delle liste negli elementi dell'array... se poi la lista e' doppiamente collegata potresti anche mettere qualsiasi elemento della lista come elemento nell'array, ma tutto dipende da cosa ci devi fare...

La ricerca dipende da come e' organizzata la struttura, se e' ordinata...


La lista è semplice per fortuna!


Postato originariamente da sarbaturino:

La ricerca dentro una lista, la dovresti fare con il metodo forza bruta..
Cioè partire dal primo o ultimo elemento e scorrere tutta la lista sino a quando non si verifichi la condizione di uguaglianza con l'elemento da te cercato..



Ma come faccio a far sì che al termine della 1 lista si sposti nella seconda cella dell'array e vada quindi nella seconda lista?


edit 15.44
sto lavorando sul codice ma mi sono inceppata prima del previsto ç_ç

#include <stdio.h>
#include <stdlib.h>

struct cella
{
int valore;
struct cella *next;

};

int main()
{
    struct cella *temp;
    struct cella *nuovo;
    struct cella *testa;
    int i;
    struct cella *array[3];
    for(i=0;i<3;i++)
        {
       array[i]=NULL; 
        }
       
    printf("Inserisco gli elementi nella lista 1");
    printf("\n");
    nuovo = (struct cella*)malloc(sizeof(struct cella));  //ho allocato lo spazio in memoria per la prima cella della lista 
    nuovo->next = testa;
    testa = nuovo;

nuovo = array[0] //associo a nuovo l'indice 0 dell'array e gli inserisco il valore
    scanf("%d", &array[0]->valore);
    array[0]->next = array[0];
    
system("pause");    
return 0;
    
}    


ma mi da errore...cioè compilo poi da errore...
sicuramente ho sbagliato qualcosa ma non saprei cosa O_O
Ultima modifica effettuata da JErikaM 04/01/12 14:46
aaa
04/01/12 15:15
pierotofy
Puoi fare un ciclo for nestato da un while... il ciclo for itera tutti gli elementi dell'array, il while all'interno del for itera gli elementi della lista finche' non incontri un puntatore nullo...
Il mio blog: piero.dev
04/01/12 15:28
JErikaM
Postato originariamente da pierotofy:

Puoi fare un ciclo for nestato da un while... il ciclo for itera tutti gli elementi dell'array, il while all'interno del for itera gli elementi della lista finche' non incontri un puntatore nullo...


se riesco ad arrivare a questo punto lo farò ;) ora sono bloccata al codice scritto sopra :S
aaa