Newsgroup: it.comp.lang.c
Titolo: Santo La Forgia Salvami tu!

Devo cercare roba su gli alberi,code,liste, ecc...
Ho provato con la Madonna e mi ha detto di rivolgermi a te.
Grazie.

Ho provato con la Madonna e mi ha detto di rivolgermi a te.
/* --------------------------- */
/* tree.c                      */
/* --------------------------- */
/* (C)2000 Andrea Laforgia     */
/* 
andrea_...@bigfoot.com
 */
/* --------------------------- */
#include <stdio.h>
#include <stdlib.h>
typedef struct tagTNodoAlbero {
                 int dato ;
                 struct tagTNodoAlbero *sx, *dx ;
        } TNodoAlbero ;
typedef TNodoAlbero* PNodoAlbero ;
void inserisciInAlbero(PNodoAlbero* Radice, const int x)
{
     if (*Radice == NULL)
     {
        *Radice = malloc(sizeof(TNodoAlbero)) ;
        (*Radice)->dato = x ;
        (*Radice)->sx = (*Radice)->dx = NULL ;
     }
     else
     if (x <= (*Radice)->dato)
        inserisciInAlbero(&(*Radice)->sx, x) ;
     else
        inserisciInAlbero(&(*Radice)->dx, x) ;
}
void scriviAlbero(PNodoAlbero Radice)
{
     if ( Radice )
     {
        scriviAlbero(Radice->sx) ;
        printf("%3d\n", Radice->dato) ;
        scriviAlbero(Radice->dx) ;
     }
}
void distruggiAlbero(PNodoAlbero* Radice)
{
     if (*Radice)
     {
        if ((*Radice)->sx)
           distruggiAlbero(&(*Radice)->sx) ;
        if ((*Radice)->dx)
           distruggiAlbero(&(*Radice)->dx) ;
        free(*Radice) ;
        *Radice = NULL ;
     }
}
int main()
{
    const int arr[] = { 3, -5, 1, -6, 3, -5, 9, 5, 2, 6, 8 } ;
    int i ;
    PNodoAlbero Radice = NULL ;
    for (i = 0 ; i < sizeof arr / sizeof arr[0] ; i++)
        inserisciInAlbero(&Radice, arr[i]) ;
    scriviAlbero(Radice) ;
    distruggiAlbero(&Radice) ;
    return 0 ;
}
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>

Ho provato con la Madonna e mi ha detto di rivolgermi a te.
/* --------------------------- */
/* list.c                      */
/* --------------------------- */
/* (C)2000 Andrea Laforgia     */
/* 
andrea_...@bigfoot.com
 */
/* --------------------------- */
#include <stdio.h>
#include <stdlib.h>
typedef struct tagTNodoLista {
                 int dato ;
                 struct tagTNodoLista *prox ;
        } TNodoLista ;
typedef TNodoLista* PNodoLista ;
void inserisciInLista(PNodoLista* Testa, const int x)
{
     if (*Testa == NULL)
     {
        *Testa = malloc(sizeof(TNodoLista)) ;
        (*Testa)->dato = x ;
        (*Testa)->prox = NULL ;
     }
     else
     inserisciInLista(&(*Testa)->prox, x) ;
}
void scriviLista(PNodoLista Testa)
{
     if (Testa)
     {
        printf("%3d\n", Testa->dato) ;
        scriviLista(Testa->prox) ;
     }
}
void distruggiLista(PNodoLista* Testa)
{
     if (*Testa)
     {
        if ((*Testa)->prox)
           distruggiLista(&(*Testa)->prox) ;
        free(*Testa) ;
        *Testa = NULL ;
     }
}
int main()
{
    const int arr[] = { 3, -5, 1, -6, 3, -5, 9, 5, 2, 6, 8 } ;
    int i ;
    PNodoLista Testa = NULL ;
    for (i = 0 ; i < sizeof arr / sizeof arr[0] ; i++)
        inserisciInLista(&Testa, arr[i]) ;
    scriviLista(Testa) ;
    distruggiLista(&Testa) ;


Ho provato con la Madonna e mi ha detto di rivolgermi a te.
/* --------------------------- */
/* queue.c                     */
/* --------------------------- */
/* (C)2000 Andrea Laforgia     */
/* 
andrea_...@bigfoot.com
 */
/* --------------------------- */
#include <stdio.h>
#include <stdlib.h>
typedef struct tagTNodoCoda {
                 int dato ;
                 struct tagTNodoCoda *prox ;
        } TNodoCoda ;
typedef TNodoCoda* PNodoCoda ;
void push(PNodoCoda *Testa, const int x)
{
     if (*Testa == NULL)
     {
        *Testa = malloc(sizeof(TNodoCoda)) ;
        (*Testa)->dato = x ;
        (*Testa)->prox = NULL ;
     }
     else
     push(&(*Testa)->prox, x) ;
}
int pop(PNodoCoda *Testa)
{
    int RetVal = 0 ;
    if (*Testa)
    {
       PNodoCoda P = *Testa ;
       RetVal = (*Testa)->dato ;
       *Testa = (*Testa)->prox ;
       free(P) ;
    }
    else
      puts("Errore : coda esaurita !") ;
    return RetVal ;
}
void scriviCoda(PNodoCoda Testa)
{
     if (Testa)
     {
        printf("%3d,", Testa->dato) ;
        scriviCoda(Testa->prox) ;
     }
     else printf( "\n" ) ;
}
void distruggiCoda(PNodoCoda* Testa)
{
     if (*Testa)
     {
        if ((*Testa)->prox)
           distruggiCoda(&(*Testa)->prox) ;
        free(*Testa) ;
        *Testa = NULL ;
     }
}
int main()
{
    const int arr[] = { 3, -5, 1, -6, 3, -5, 9, 5, 2, 6, 8 } ;
    int i ;
    PNodoCoda Testa = NULL ;
    for (i = 0 ; i < sizeof arr / sizeof arr[0] ; i++)
        push(&Testa, arr[i]) ;
    puts("Coda originale:") ;
    scriviCoda(Testa) ;
    printf("\nin uscita : %3d, in entrata :  10\n", pop(&Testa)) ;
    push(&Testa, 10) ;
    scriviCoda(Testa) ;
    distruggiCoda(&Testa) ;
