daniele 的个人资料blog di daniele detto th...照片日志列表更多 ![]() | 帮助 |
|
12月31日 CapodannoBeh che dire. Come tutti scrivo l' intervento di fine anno, preso da un raptus di originalità ( un po' come quello che prende a zucchero quando "compone " le sue canzoni ). Innanzi tutto rispondo a zubburubbbbu che so che aspetta trepidante una mia risposta : il preesame è stato un successone, più o meno come lo furono le vendite della fiat duna. :-)
Detto ciò, tutti si apprestano a festeggiare il capodanno. Personalmente, non sono mai stato un tipo festaiolo, e piuttosto che diventarlo, mi sparerei un coglione. VORREI SOTTOLINEARE CHE...NULLA CONTRO LE FESTICCIOLE EH!! E' solo che pattinare sul vomito, e ascoltare concerti di rutti non è mai rientrato tra i miei gusti, però come dico sempre, il mondo è bello perchè è tondo. E comunue, siccome io facce da emo dopo che è morto un tokio hotel non ne voglio vedere, quindi resterò a casa coi miei vecchi.
Mangerò pastasciutta in bianco, uovi alla coc e se sono fortunato, accompagnero il tutto con un buon bicchiere d' acqua del rubinetto. A mezzanotte lo scambio di auguri, e poi a nanna.
Purtroppo capita di avere differenti punti di vista ma, la dignità è giusto che rimanga tale, e nella vita potranno togliermi tutto ( anche il mio Casio ( il breil costava troppo ) ) ma mai la mia dignità perchè senza quella non valiamo un ficco secco.
Per ora non mi va di spendere troppe parole in merito. Solo, un giorno, quando magari saro' chissà dove, qualche persona si pentirà e capirà che magari sarebbe stato meglio "accontentarsi" e anzi che quell "accontentarsi" in realtà era meglio di quanto non potesse sperare. Ci sono treni che passano una volta sola, poi non tornano più.
Non mi ritengo perfetto, ci mancherebbe altro, però nella mia breve vita, che nonostante sia stata breve ha avuto parecchie difficotà, mi sono accorto che spesso e volentieri, le mie previsioni si sono rivelate esatte. E spesso e volentieri chi non era d accordo con me aveva torto.
Ora basta ho gia scritto troppo, vi auguro un buon capodanno e felice anno nuovo. Spero anche che l alcol possa farvi provare quell' apparente e momentanea felicità di cui andate fieri, e spero anche che vi permetta di ricordare qualcosa, da raccontare ai vostri nipoti quando sarete vecchi, cirrosi permettendo. 12月18日 Non Ho PHPito, C può rispiegare? Java bene.Salve ragazzi MASCHI ( le femmine non possono capire tranne una ) U.U OH CON TUTTO IL RISPETTO PER LE FEMMINE CHE SECONDO ME SONO INTELLIGENTISSIME EH.
Allora oggi vi insegnerò a creare e gestire liste LIFO ( Last In First Out anche dette pile ) e FIFO ( First In First Out anche dette code ) in C.
L' uso delle liste è una pratica di dubbia utilità, inventata probabilmente da una persona con pochi impegni e pochissime donne ( In gergo queste persone sono dette "sfigati" oppure direttamente non vengono nominate ) . Comunque, prescindendo dal PERCHE' esistono, purtroppo esistono quindi noi poveri esseri umani siamo costretti a imparare padroneggiarle. Per inciso, preferirei giocare a calcio in un campetto coltivato a carciofi che star qui a fare quste cose, ma questo ha poca importanza.
Partiamo dall' inizio, ovviamente. Se dovessimo rappresentare una lista graficamente, la rappresenteremmo come una catena [vedi fig. 1 (fig. STA PER FIGURA EH)] di elementi divisi in due partizioni, una contenente un dato, una contenente un puntatore all' anello successivo della catena. Il dato memorizzato in ciascun anello, che per convenzione chiameremo nodo può essere di vario tipo ( intero, carattere, stringa, array ).
Per prima cosa, dobbiamo definire il nodo e per fare questo utilizziamo "typedef". Questa splendida parola ci permette di dichiarare un tipo di dato all' inizio del programma ( più precisamente dopo l' importazione di eventuali librerie ). Il nodo, come accennato prima, non è altro che una struttura composta da due attributi : un dato, e un puntatore al nodo successivo. Quindi, mi accingo a dichiararlo :
N.B. Per i meno esperti, che come i più esperti si guarderanno bene dal leggere questo noiosissimo intervento, il simbolo "//" precede un commento, ovvero una porzione di testo che ha un valore prettamente esplicativo, ma non viene visto dal compilatore.
typedef struct elemento{ //definisco un tipo di dato che potrò utilizzare in tutto il programma. In questo caso il dato è una struttura che chiamo elemento
int info; //nella struttura dispongo un attributo dato struct elemento * next; //dispongo un attributo di tipo puntatore a un altra struttura in modo da rendere possibile il concatenamento di più strutture }nodo; //assegno al tipo di struttura appena definito, il nome nodo. D' ora in poi la parola "nodo" si riferirà a questo tipo di struttura Ora che ho dichiarato il tipo nodo, posso procedere a spiegare come utilizzare il suddetto.
La presunta utiità di questo tipo di operazione, sta nel fatto che differenza degli array, strutture di dati aventi un numero fisso di posizioni in cui memorizzare determinati valori di uno stesso tipo, le liste sono strutture dinamiche, cioè ci permettono di allocare in memoria una quantità di dati non definita a priori. Le operazioni che vengono fatte in una lista ( sia che si stratti di una pila, sia che si tratti di una coda ) sono : aggiuna, modifica, lettura o eliminazione di uno o più elementi. Tuttavia, per poter eseguire tali operazioni è necessario creare la lista. Anche l' operazione di aggiunta non può essere portata a termine se prima non viene fatta una prima inizializzazione.
Il perchè è molto semplice. Una persona dalle buffe origini, le minuscole capacità di ragionamento e l' inversamente proporzionale stupidità penserebbe che per iniziare una lista basti semplicemente aggiungere un nodo al "nulla". Purtroppo per lui questo non si può fare. Se andiamo a rianalizzare la struttura del nodo, ci accorgiamo che uno dei due attributi è un puntatore a un altro nodo. Ora, se si ha a che fare col primo nodo della lista, il suo attributo puntatore cosa punterà?
Nella creazione del metodo per inserire un nuovo nodo nella lista, avviene la prima differenziazione tra pila e coda che per comodità MIA e solo MIA ( e x smr mia ç_ç ) chiamerò rispettivamente LIFO e FIFO.
Cominciamo con il metodo che ci permette di aggiungere un elemento ( o nodo, o anello della catena ) a una LIFO.
nodo aggiungiElemento(nodo * inizio, int dato){ //parametri : un puntatore al primo elemento della lista e un dato da inserire nel nuovo elemento
nodo * p; //dichiaro un puntatore a un nodo p=(nodo*) malloc(zifeof(nodo)); //predispongo il puntatore a memorizzare un nodo esplicitando la memoria necessaria p->info = dato; //il dato fornito come parametro viene assegnato al campo info del nodo appena dichiarato p->next = inizio; //Il puntatore del nuovo elemento nodo punterà il dato del primo elemento della lista, che diventerà così il secondo return p; //viene restituito p, ovvero il puntatore al primo elemento della lista. Così potrò utilizzarlo per successive operazioni di aggiunta } Come vedete si tratta di 5 semplici righe di codice all' interno di una funzione che richeide due parametri. I parametri richiesti, sono semplicemente i due attributi del tipo "nodo" ovvero il dato da memorizzare, e il puntatore al nodo che vogliamo far puntare all' attributo puntatore del nuovo nodo ( scusate il gioco di parole ). In questo caso, trattandosi di una LIFO dobbiamo passare come parametro un puntaore all' ultimo nodo inserito nella lista.
All' interno della funzione, dichiariamo il nuovo nodo che vogliamo aggiungere, allocchiamo la memoria necessaria a contenerlo, assegnamo il dato inserito come parametro al suo attributo dato ( che ho chiamato info ) e assegnamo al suo attributo puntatore, il puntatore al primo elemento della lista il quale diventerà secondo. Infine restituisco il puntatore al nodo appena creato. Questo perchè così facendo, potro utilizzare questa funzione in maniera ricorsiva, oppure in un ciclo.
Il caso della FIFO è leggermente più complicato. Infatti, è necessario, a ogni inserimento, scorrere la lista finchè non si arriva all' ultimo elemento. A questo punto, al suo puntatre verrà assegnato il nuovo elemento che vogliamo aggiungere, mentre il puntatore di quest' ultimo avrà valore null |
|
|