[Source] Gestione Stack - Versione stampabile +- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi) +-- Forum: Programmazione (https://www.making-videogames.net/giochi/Forum-Programmazione) +--- Forum: Programmazione in C C++ e C# (https://www.making-videogames.net/giochi/Forum-Programmazione-in-C-C-e-C) +--- Discussione: [Source] Gestione Stack (/thread-Source-Gestione-Stack) |
[Source] Gestione Stack - ManHunter - 25-05-2011 Salve a tutti, oggi cercherò di spiegarvi come realizzare una struttura dati che si comporti come uno stack. Uno stack è una struttura dati che assume un comportamento particolare durante l'estrazione dei dati. Tale comportamento è detto L.I.F.O., acronimo di Last In First Out. In parole povere, in questa struttura l'ultimo elemento inserito sarà il primo ad essere estratto. Per operare su questa struttura, utilizzeremo due funzioni principali: push() e pop(). La funzione di push si occuperà di inserire dati all'interno dello stack mentre la funzione pop si occuperà di estrarre dati da esso. Utilizzeremo, inoltre, altre funzioni di appoggio. Iniziamo! Per prima cosa, creiamo la nostra struttura: Codice: typedef int tInfo; /*dichiariamo un tipo di dato equivalente ad un intero. Potete cambiare da intero a qualsiasi tipo vogliate, anche una struttura.*/ Implementiamo ora le funzioni che operano sul nostro stack. Abbiamo bisogno di: - creazione dello stack - distruzione dello stack - inserimento di dati - estrazione di dati - funzioni di appoggio Creazione stack - tStack* stackCreate( int ); Codice: tStack* stackCreate( int ){ Distruzione stack - tStack* stackDelete( tStack * ); Codice: tStack* stackDelete( tStack *stack ){ Inserimento dati - void push( tStack*, tInfo ); Codice: void push( tStack *stack, tInfo info ){ Estrazione dati - tInfo pop( tStack* ); Codice: tInfo pop( tStack *stack ){ Funzione predicativa - bool isEmpty( tStack* ); Codice: bool isEmpty( tStack *stack ){ Funzione predicativa - bool isFull( tStack* ); Codice: bool isFull( tStack *stack ){ Queste dovrebbero essere le funzioni necessarie: nulla toglie che potete implementarne di altre... Inserisco anche il progetto completo, compreso di main() per testare il funzionamento delle funzioni. - stack.h - Codice: #ifndef STACK_H - stack.c - Codice: #include "stack.h" - main.c - Codice: #include <stdio.h> E questo è tutto. Per eventuali malfunzionamenti o consigli potete contattarmi in privato oppure scrivere qui di seguito. Saluti. RE: [Source] Gestione Stack - friskon - 26-05-2011 ancora grazie del gran contributo RE: [Source] Gestione Stack - Skyline - 26-05-2011 Che lavoro... xD Bel post e sopratutto utile. RE: [Source] Gestione Stack - steve - 26-05-2011 Solitamente per gli stack si usa l'allocazione dinamica: con un realloc (da verificare, sono abbituato ad usare il new del c++) ad ogni pop e push si evita di assegnare delle dimensioni alla inizializzazione. RE: [Source] Gestione Stack - ManHunter - 26-05-2011 (26-05-2011, 06:07 PM)steve Ha scritto: Solitamente per gli stack si usa l'allocazione dinamica: con un realloc (da verificare, sono abbituato ad usare il new del c++) ad ogni pop e push si evita di assegnare delle dimensioni alla inizializzazione. Capisco... Sto cercando di applicare solamente quello che imparo a lezione all'università... Per ora tale argomento ci è stato presentato così, per questo cerco di non discostarmi troppo dall'esposizione del professore. La funzione realloc non l'abbiamo ancora utilizzata, utilizziamo la malloc per l'allocazione dinamica... |