Esercizio con liste concatenate

di il
3 risposte

Esercizio con liste concatenate

Salve a tutti sono alla prese con un programma abbastanza complesso ed essendo alle prime armi con l'informatica sto avendo qualche problema.

Si chiede di scrivere un programma che legge dallo standard input, una sequenza i righe e stampa il corrispondente indice inverso. I dati sono codificati da numeri interi, e che uno 0 segnala la fine della riga.
( per esempio il programma riceve
7: 1, 2, 3, 0
4: 1,6,7,0
5: 2,3,6,0

e stampa:

1: 7,4
2: 7,5
3:7,5
6: 4, 5
7:7 )


La fine dei dati è rappresentata da una riga contente solo il numero 0. IL NUMERO DI RIGHE E IL NUMERO DI CODICI NON è FISSATO A PRIORI. Il programma non deve essere interattivo e nella fase di lettura si supponga che l'espressione sia scritta correttamente.

Allora spiego quello che ho pensato di usare io in linguaggio pseudo-codice per non dilungarmi troppo tra dichiarazioni e resto.
La mia idea si basa sull'uso delle liste concatenate che mi danno la possibilità attraverso la malloc di creare "spazi" grandi quanto si vuole.
Quindi dichiaro un record che ha un campo che rappresenta un elemento del codice e l'altro che è un puntatore che punto al record stesso:
struct elemento{
int x;
q=struct elemento * prox
}
A questo punto leggo il codice
if( elemento.x != 0 ){
scanf(elemento.x)
} else{
elemento*prox=NULL
}
Così dovrei essere riuscita a creare un algoritmo in cui ogni riga è formata da una lista concatenata di record e la macchina legge i campi x del record finchè non trova 0 dove finisce la lista.
E' giusto? Ha senso?
Il resto del programma mi crea ancora più problemi nel senso che immagino bisogni creare una funzione che cerca un certo valore nel codice e se lo trova mi stampa il primo numero della serie. Però non so come muovermi nelle liste, cioè come trattare i singoli elementi e come chiamarli in causa.

3 Risposte

  • Re: Esercizio con liste concatenate

    Provo a scrivere la prima parte:
    
    struct ELEM{
                       int elem;
                       struct ELEM * succ;
    }
    
    struct INDICE{ 
                          int indice;
                          struct elem*succ;
                          struct INDICE * succ;
    }
    int main(){
                     scanf("%d", x)  //leggo la prima variabile
                    if (x != 0){
                                   x=INDICE.indice
                                   scanf("%d",x)
                     while( x =! 0 ){
                                            x=ELEM.elem;
                     }                       
    
    
    
  • Re: Esercizio con liste concatenate

    Anzi forse è meglio:
    
    struct elem{
                       int num;
                       struct elem*succ
    }
    int main {
    int x; int NOME;
    struct elem y;
    scanf("%d", &x):
    if (x = 0){
    exit(EXIT_FAILURE); }
    else { x=NOME; 
             scanf("%d",y)
             while(y =! 0){
                                 y=elem.num;
              }
    }
    }
    
    Questo sarebbe solo per leggere le righe e chiamare il primo elemento nome e il resto leggerle come campi di record
  • Re: Esercizio con liste concatenate

    Dopo averci passato su alcune ore è uscito( nome sarebbe la prima cifra e sport i numeri):
    
    
    #include<stdio.h>
    #include<stdlib.h>
    
    struct sport{
        int val;
        struct sport*succ;
        
    };
    struct nome* incoda(struct nome * nom, int vari){
      struct nome *p;
      p=(struct nome*)malloc(sizeof(struct nome));
      while(nom->succ != NULL){
        nom=nom->succ;
      }
      nom->succ=p;
      nom->succ->num=vari;
      nom->succ->succ=NULL;
    return p;
    }
    *struct nome{
         int num;     
         struct nome*succ;
         struct sport*l;
    };
    /*struct nome*ricerca(struct sport*testa,valore){
         while(testa!=NULL){
           testa=testa->succ;
           if(testa->val == valore){
             return struct sport*l;
           else
             return NULL;
          }
         }
    };*/
    struct sport* inseriscicoda(struct sport * testa, int valore){
      struct sport *n;
      n=(struct sport*)malloc(sizeof(struct sport));
      while(testa->succ != NULL){
        testa=testa->succ;
      }
      testa->succ=n;
      testa->succ->val=valore;
      testa->succ->succ=NULL;
    return n;
    }
      
         
    // Funzione che stampa i valori della lista
    void stampaLista(struct sport * testa) {
        while(testa != NULL) {
            printf("%d ", testa->val);
            testa = testa->succ;
        }
        printf("\n");
    }
          
    
    int main() {
        int v,b;    
        struct sport * testa;
            struct nome *nom;
            testa->succ=NULL;
            scanf("%d",&b);
            nom=incoda(nom,b);
            
    
            
        
        
        
        stampaLista(testa);
        exit(EXIT_SUCCESS);
    }
    
    Non capisco come collegare gli sport ai nomi. Mi vengono due liste separate.
Devi accedere o registrarti per scrivere nel forum
3 risposte