PHP Code:
/***
* _ _
* (_) (_)
* __ ____ _ _ _____ ___ ___ ___ ___ _ __ ___
* \ \/ / _` | |/ _ \ \ / / |/ _ \ / __/ _ \| '_ ` _ \
* > < (_| | | (_) \ V /| | (_) | (_| (_) | | | | | |
* /_/\_\__, |_|\___/ \_/ |_|\___(_)___\___/|_| |_| |_|
* __/ |
* |___/
*/
/*
1)lista di strutture ( info,link ), mettere ogni nodo in un vettore
poi da array a lista
(vddi write to disk)
*/
#include <st***.h>
#include <stdlib.h>
#include <string.h>
typedef struct element {
char * info;
int points ;
struct element * link;
} element_struct;
/////////////////////////// prototypes
void * xmalloc (int byte);
element_struct * save_list ( element_struct * lista, int * elements_to_save);
/////////////////////////////////////////////// begin
int main ( void ) {
//// sample data
element_struct data[]={
{"spada", 100, data + 1},
{"scudi", 230, data + 2},
{"maronna", 450, data + 3},
{"prezzemolo", 10, NULL}
};
////////////// end sample data
////////////////////////// declaration
element_struct * lista; // input list
element_struct * vet_to_save; // vet returned from function - save this to disk
int elements_to_save; // number of elements to save
int i; // used to count
////////////////////////////// end declaration
////////////// sample data to list - replace here the source
lista = data;
///////////////////////////////////// save list to array : next step -> save to disk
vet_to_save = save_list ( lista, &elements_to_save);
///////////////////////////////// print saved array - debug only
for (i=0 ; i<elements_to_save; i++){
printf("%s , %d \n", (vet_to_save + i)-> info , (vet_to_save + i)-> points );
}
///////////////////////////////////////////////////////////////////// array to list
/*
* int numero_elementi;
* element_struct vet[leggi numero elementi da file];
* element_struct lista;
*
* numero_elementi= leggi da file il numero;
* carica_elementi_da_disco (file,vet, numero_elementi, sizeof (element_struct)) // carica da file in vet
*
*
* ////////////////////////// linkiamo le strutture nel vettore
*
* for (i=0;i<numero_elementi-1;i++){
* (vet +i)->link = vet + i + 1;
* }
* (vet +i)->link = NULL;
*
* lista = vet;
*
*/
return 0;
}
element_struct * save_list ( element_struct * lista, int * elements_to_save){
element_struct * temp_node;
element_struct * vet_to_save;
int i;
//////////////////////////////// conto il numero di elementi
for ( temp_node = lista , i=0 ; temp_node != NULL; i++ , temp_node = temp_node ->link){
}
/////////////////////////////// salvo numero di elementi
*elements_to_save = i;
///////////////////////////////// alloco spazio per il blocco consecutivo di dati
vet_to_save = (element_struct *) xmalloc ( i * sizeof(element_struct));
for ( temp_node = lista , i = 0 ; temp_node != NULL; i++ , temp_node = temp_node ->link){
memcpy (vet_to_save + i, temp_node , sizeof(element_struct));
}
return vet_to_save;
}
void * xmalloc (int byte){
void * punt;
punt = malloc (byte);
if (punt == NULL){
printf("Spazio non sufficiente\n");
exit(-1);
}
return punt;
}