Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - PUNTATORI IN C?
Forum - C/C++ - PUNTATORI IN C?

Avatar
splittik (Normal User)
Rookie


Messaggi: 27
Iscritto: 25/04/2012

Segnala al moderatore
Postato alle 13:35
Sabato, 19/05/2012
Salve a tutti, premetto che sono nabbo da far schifo e dunque sarei molto grato a chi deciderà di aiutarmi ed inotre vi chiedo di NON postare codice ma piuttosto darmi delle indicazioni sui vari punti.

Per iniziare vorrei implementare min senza usare i metodi head e removes in quanto l'ho gia fatto  ma il mio intento è rifarlo usando solo i puntatori.
In min credo di aver creato un puntatore al primo elemento della lista (che resterà fermo) e nel ciclo creo un nuovo puntatore al "nodo" successivo che mi servirà per fare i confronti.
In base ai confronti dell'if aggiorno il minimo e ritorno la parte intera del puntatore...ma quando stampo il valore mi scrive l'ultimo elemento che ho inserito.
Questo è il mio primo dubbio ringrazio anticipatamente chiunque voglia aiutarmi CIAO CIAO

Il testo è questo:
Modificare la libreria di gestione delle liste come segue:
1 aggiungere puntatore prev
2 scrivere funzioni min e max
3 scrivere funzione deletekey

Codice sorgente - presumibilmente C++

  1. //file liste.h
  2. typedef struct elem {
  3.         int key;
  4.         struct elem *next;
  5.         struct elem *prev;
  6. } elemen_t;
  7.  
  8. typedef elemen_t* lista_t;
  9.  
  10.  
  11.  
  12. int is_empty(lista_t lista);
  13.  
  14. int length(lista_t lista);
  15.  
  16. lista_t insert(lista_t lista, int key);
  17.  
  18. int head(lista_t lista);
  19.  
  20. void removes(lista_t *plista);
  21.  
  22. int max(lista_t lista);
  23.  
  24. int min(lista_t lista);
  25.  
  26. void delete_key(lista_t *lista, int key);





Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "liste.h"
  4.  
  5.  
  6. int is_empty(lista_t lista) {
  7.         return(lista == NULL);
  8. }
  9.  
  10.  
  11. int length(lista_t lista) {
  12.         int n = 0;
  13.         while(lista != NULL) {
  14.                 n++;
  15.                 lista = lista->next;
  16.         }
  17.         return n;
  18. }
  19.  
  20.  
  21. lista_t insert(lista_t lista, int key) {
  22.         elemen_t *paux;
  23.         paux = (elemen_t *)malloc(sizeof(elemen_t));
  24.         paux->key = key;
  25.         paux->next = lista;
  26.         return paux;
  27. }
  28.  
  29.  
  30. int head(lista_t lista) {
  31.         if(lista != NULL) {
  32.         return lista->key;
  33.         }
  34.         return 0;
  35. }
  36.  
  37.  
  38. void removes(lista_t *plista) {
  39.         elemen_t *paux;
  40.         if(*plista != NULL) {
  41.                 paux = *plista;
  42.                 *plista = (*plista)->next;
  43.                 free(paux);
  44.         }
  45. }
  46.  
  47.  
  48. int min(lista_t lista){
  49.  
  50.         elemen_t *nodo=lista;
  51.         int num=nodo->key;
  52.  
  53.         elemen_t *prox=lista;  
  54.         int numn=prox->key;
  55.  
  56.         do{
  57.                 prox++;
  58.                 if(num>numn){
  59.                         num=numn;
  60.                         prox++;
  61.                 }
  62.                 else{
  63.                         break;
  64.                 }
  65.  
  66.  
  67.         }while(lista != NULL);
  68.        
  69.         return nodo->key;      
  70.  
  71. }
  72.  
  73.  
  74. void delete_key(lista_t *plista, int key){
  75.         //da implementare
  76. }





Codice sorgente - presumibilmente C++

  1. include <stdio.h>
  2. #include <stdlib.h>
  3. #include "liste.h"
  4.  
  5. void main(){
  6.  
  7.         int num;
  8.         int i;
  9.         int n;
  10.         int testa;
  11.        
  12.         lista_t elm;
  13.         lista_t elm1;
  14.         lista_t elm2;
  15.         elm=(struct elem*)malloc(sizeof(struct elem));
  16.         elm1=(struct elem*)malloc(sizeof(struct elem));
  17.         elm2=(struct elem*)malloc(sizeof(struct elem));        
  18.  
  19.         printf("insesisci dimensione lista: ");
  20.         scanf("%d", &num);
  21.  
  22.         for(i=0; i<num; i++){
  23.  
  24.                 printf("insesisci num intero: ");
  25.                 scanf("%d", &n);
  26.                
  27.                 elm =insert(elm, n);
  28.                 elm1 =insert(elm1, n); 
  29.                 elm2 =insert(elm2, n); 
  30.         }
  31.         int minimo=min(elm);
  32.         printf("minimo %d\n", minimo);
  33.        
  34.         //int massimo=max(elm1);
  35.         //printf("massimo %d\n", massimo);
  36.  
  37.         //delete_key(&elm2 , 5);
  38.  
  39.         free(elm);
  40.         free(elm1);
  41.         free(elm2);






PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 1:16
Domenica, 20/05/2012
?

Non puoi attraversare una lista usando solo i puntatori...

Codice sorgente - presumibilmente C/C++

  1. lista_t *curr = lista;
  2. int min = MAX_INT;
  3. while(curr != NULL){
  4.    if (curr->key < min) min = curr->key;
  5.    curr = curr->next;
  6. }
  7. return min;


Ultima modifica effettuata da pierotofy il 20/05/2012 alle 1:17


Il mio blog: https://piero.dev
PM Quote
Avatar
splittik (Normal User)
Rookie


Messaggi: 27
Iscritto: 25/04/2012

Segnala al moderatore
Postato alle 15:31
Lunedì, 21/05/2012
ciao boss

dunque al posto di
curr = curr->next;

è sbagliato usare
curr++;
perchè punterei in una parte sbagliata della struct??

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:01
Lunedì, 21/05/2012
Esatto.


Il mio blog: https://piero.dev
PM Quote