Autore Topic: Linked List: Struttura che fa riferimento a un'altra Struttura  (Letto 1317 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Qualcuno ha avuto già modo di cimentarsi in Gambas-3 con le Linked List, ossia con quelle particolari Strutture che servono a memorizzare in modo dinamico una grande quantità di dati non predefinita ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #1 il: 07 Dicembre 2011, 15:28:04 »
a dire il vero no, anzi fino ad ora non sapevo che esistessero  :hatecomputer:
un esempio?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #2 il: 07 Dicembre 2011, 15:45:21 »
a dire il vero no, anzi fino ad ora non sapevo che esistessero  :hatecomputer:
un esempio?
Codice: C [Seleziona]

#define BUFFER_SIZE 4088

/* linked list of buffers, stores data as in the file */
struct buffer {
    struct buffer *next;
    unsigned char buf[BUFFER_SIZE];
};

struct smf_track {
    int size;           /* size of entire data */
    int cur_buf_size;       /* size of cur_buf */
    struct buffer *cur_buf;
    snd_seq_tick_time_t last_tick;  /* end of track */
    unsigned char last_command; /* used for running status */
    int used;           /* anything record on this track */
    struct buffer first_buf;    /* list head */
};


Questo genere di strutture si usa quando non sai a priori quanti dati avrai, e allora ti prendi memoria poco per volta, quando serve. Il primo dato viene "rintracciato" da un puntatore, che punta alla prima struttura. Dentro la prima struttura, oltre ai dati rilevanti, c'è un puntatore alla struttura successiva, e così via.

Vedi anche: http://it.wikipedia.org/wiki/Lista_concatenata
« Ultima modifica: 03 Gennaio 2013, 16:45:32 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #3 il: 07 Dicembre 2011, 16:49:58 »
confermo di non saperne nulla :)

non saprei neppure in che caso usarlo :2birre:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #4 il: 07 Dicembre 2011, 17:06:38 »
confermo di non saperne nulla :)

non saprei neppure in che caso usarlo :2birre:

...forse è da paragonarsi ad una specie di array dinamico:rolleyes:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #5 il: 09 Dicembre 2011, 10:35:42 »
In Gambas3 è stata inserita la struttura, così come per il C/C++.
Ha ovviamente ancora dei limiti, e alcune logiche diverse, ma di base è molto simile a quelle del C.
Ho fatto delle prove qualche tempo fà, appena letta questa possibilità, e la cosa funziona, solo che non provato ad includere strutture una dentro l'altra.
Comunque, in definitiva, in Gambas3 la struttura si comporta similarmente ad un oggetto, una classe senza metodi, ma solo come definizione di spazio in memoria, così come è in C.
Se dai una letta più approfondita nella documentazione di Gambas3, a parte qualche frase un pò fumosa e che porta anche fuori strada, vedrai che la cosa è semplice da implementare.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #6 il: 09 Dicembre 2011, 11:44:48 »
In Gambas3 è stata inserita la struttura, così come per il C/C++.
Ha ovviamente ancora dei limiti, e alcune logiche diverse, ma di base è molto simile a quelle del C.
Ho fatto delle prove qualche tempo fà, appena letta questa possibilità, e la cosa funziona, solo che non provato ad includere strutture una dentro l'altra.
Comunque, in definitiva, in Gambas3 la struttura si comporta similarmente ad un oggetto, una classe senza metodi, ma solo come definizione di spazio in memoria, così come è in C.
Se dai una letta più approfondita nella documentazione di Gambas3, a parte qualche frase un pò fumosa e che porta anche fuori strada, vedrai che la cosa è semplice da implementare.

Questo sarà senz'altro interessante per poter creare delle funzioni che ritornano delle strutture invece di singole variabili. Forse finalmente si andrà via via eliminando la pratica di dichiarare variabili pubbliche per ovviare a questa mancanza... ;)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #7 il: 12 Dicembre 2011, 00:26:32 »
...forse è da paragonarsi ad una specie di array dinamico.  :rolleyes:

...ed infatti Minisini, alla mia domanda sull'uso delle Strutture concatenate, mi risponde così:

"Why don't you use an array instead? Most of the time it is faster.
--
Benoît Minisini
"
« Ultima modifica: 03 Gennaio 2013, 16:46:32 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Linked List: Struttura che fa riferimento a un'altra Struttura
« Risposta #8 il: 05 Novembre 2020, 22:24:06 »
Riguardo alla realizzazione in Gambas delle "Liste" lineari concatenate segnalo la seguente pagina della nostra Wiki:

   https://www.gambas-it.org/wiki/index.php?title=Creare_una_Lista_Lineare
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »