Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C] struttura per coda

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    19

    [C] struttura per coda

    Per la lista e per la pila si usa definire una struttura
    es per le liste:

    codice:
    struct SNode{
           int info;
           struct SNode *link;
           };
    typedef struct SNode TNode;
    typedef TNode *TList;
    per la pila:
    codice:
       typedef struct {
            int dim;
            int array[MAX];
            } TStack;
    Ma per la coda ?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    La puoi fare bidirezionale cioè con un puntatore al nodo successivo e a quello precedente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    19
    Cioè simile alla struttura della lista ma con 2 puntatori?
    tipo così?
    codice:
      
     struct SNode{
           int info;
           struct SNode *head;
           struct SNode *tail
           };
    typedef struct SNode Coda

  4. #4
    Parlare di pila o coda indica una modalità di accesso ai dati, di fatto le puoi implementare usando diverse strutture sottostanti, come un array o una lista; in entrambi i casi, se ti appoggi ad una lista, basta una lista linkata in una sola direzione. Infatti:
    - nel caso della coda, ti basta tenere i puntatori a testa e coda; aggiungere un elemento in coda significa sostituire il puntatore di coda con il nuovo elemento, e far il puntatore "next" dell'ex-coda al nuovo elemento; togliere un elemento significa prendere l'elemento in testa e sostituirlo con quello puntato dal suo puntatore next;
    - nel caso della pila, ti basta il puntatore alla cima, e fare sì che ogni elemento abbia un puntatore al successivo: aggiungere un elemento in cima significa creare un nuovo elemento, memorizzare nel suo puntatore "next" l'ex-cima dello stack e far puntare la cima dello stack a lui; toglierlo funziona come nel caso della coda.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Quoto quanto detto da MItaly. Pila e code indicano modalità di accesso (rispettivamente LIFO e FIFO), ma si possono implementare con diverse strutture dati.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    19
    ma quindi questa va bene?
    codice:
    struct SNode{
           int info;
           struct SNode *head;
           struct SNode *tail
           };
    typedef struct SNode Coda

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    codice:
    typedef struct LNode{
      int info;
      struct SNode *link;
    } LNode;
    typedef LNode *List;
    
    typedef struct Coda {
      List first;
      List last;
    } Coda;
    Per aggiungere un elemento lo aggiungi dopo last (che punta all'ultimo elemento), per prelevarlo lo prendi da first (che punta al primo) e sostituisci first con first->next...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    19
    quindi come sono fatte le funzioni di inserimento e estrazione?

    io direi
    codice:
    void InQueue(Coda c, int x){
                               List new_el;
                               new_el=(LNode *)malloc(sizeof(LNode));
                               new_el->info=info;
    ma per i collegamenti?
    e quella di estrazione?

  9. #9
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    In pratica è come una lista normale solo che l' inserzione avviene in coda e l' estrazione in testa (oppure viceversa).
    Un elemento puoi aggiungerlo in testa, cioè lo crei e dopo averlo creato lo colleghi con il primo elemento (che diventerà il secondo), e il puntatore testa lo fai puntare al nuovo elemento inserito.
    Per quanto riguarda la cancellazione ti basta deallocare l' ultimo nodo,far puntare il penultimo->successivo a NULL e far puntare coda a quello che è il nuovo ultimo elemento.
    Prova a farlo utilizzando le strutture suggerite da Scara95.

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Trattandosi di una lista linkata in un solo verso conviene prelevare dalla testa e fare puntare il secondo puntatore all'ultimo elemento inserito per inserire poi nel suo ->next
    Il motivo principale è che non hai complicazioni nel gestire i puntatori, ma se utilizzi una lista linkata in entrambe le direzioni puoi benissimo fare come ha detto Who!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.