{"id":172,"date":"2010-04-07T10:46:00","date_gmt":"2010-04-07T10:46:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=172"},"modified":"2010-04-07T10:46:00","modified_gmt":"2010-04-07T10:46:00","slug":"strutture-dati-generalita","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/strutture-dati-generalita\/","title":{"rendered":"Strutture dati: Generalit\u00e0"},"content":{"rendered":"<div><\/div>\n<p><a href=\"http:\/\/1.bp.blogspot.com\/_Tg1CIil2fDM\/S7yATXQFIOI\/AAAAAAAAAg4\/0ftgyk5LXpw\/s1600\/VList_example_diagram.png\"><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/_Tg1CIil2fDM\/S7yATXQFIOI\/AAAAAAAAAg4\/0ftgyk5LXpw\/s400\/VList_example_diagram.png\" border=\"0\" alt=\"\"><\/a><\/p>\n<div><span>Inauguriamo una nuova sezione del blog che avrei voluto iniziare gi\u00e0 diverso tempo addietro ma che, per mancanza di tempo, non ho mai cominciato a scrivere.<\/span><\/div>\n<div><span>La nuova sezione, particolarmente interessante per chi vuole approfondire la programmazione ad un livello pi\u00f9 alto, tratter\u00e0 le <\/span><b><span>strutture dati<\/span><\/b><span>. Per studiare gli algoritmi che gestiscono questi tipi di elementi, useremo il <\/span><b><span>C\/C++<\/span><\/b><span> vista la potenza del linguaggio e data la presenza dei puntatori che favoriscono la possibilit\u00e0 di sfruttare le qualit\u00e0 stesse delle strutture.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span><u>STRUTTURE DATI<\/u><\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Le <\/span><b><span>strutture dati<\/span><\/b><span> sono dei particolari strumenti strutturali mediante i quali \u00e8 possibile organizzare un <\/span><b><span>insieme di dati<\/span><\/b><span> e mantenerli o in memoria centrale, per tutta la durata dell&#8217;uso del software, o per riversarli nella memoria di massa per eventuali modifiche successive.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Un buon uso delle strutture dati, prevede la possibilit\u00e0 di utilizzare dati di tipo diverso nello stesso elemento strutturale. Proprio per tale motivo, quando si scrive un algoritmo che gestisce una struttura, la si deve vedere come una situazione il pi\u00f9 possibile generica senza soffermarsi in maniera particolare sul tipo di dato da utilizzare. In questo modo si scriver\u00e0 codice perfettamente utilizzabile in ogni situazione in cui l&#8217;utente pu\u00f2 trovarsi.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span><u>ALGORITMI<\/u><\/span><u><\/u><\/b><u><b><span><\/span><\/b><\/u><b><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Come si \u00e8 accennato, le strutture dati sono gestite da particolari <\/span><b><span>algoritmi<\/span><\/b><span> studiati appositamente per la struttura presa di volta in volta in esame.<\/span><\/div>\n<div><span>Un&#8217;algoritmo \u00e8 una serie di step (passi) da effettuare per poter giungere alla realizzazione di uno scopo prefissato. La serie di passi effettuati deve essere finita e deve giungere sempre alla risoluzione del problema iniziale. Un algoritmo deve godere dell&#8217;ottimizzazione per la richiesta di memoria al sistema e\/o per la richiesta di cicli e quindi di tempo di esecuzione. Tuttavia un buon algoritmo si basa anche su altri parametri quali robustezza, stabilit\u00e0, modularit\u00e0, etc&#8230;<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Una buona organizzazione della struttura dati, favorisce la stesura di buoni algoritmi sia in termini di uso di memoria che di velocit\u00e0. Ad esempio, cercare una parola all&#8217;interno di una lista risulter\u00e0 pi\u00f9 facile se quest&#8217;ultima \u00e8 ordinata e, in tale situazione, l&#8217;algoritmo sar\u00e0 scritto in maniera tale da cercare la parola in base a come \u00e8 ordinata la lista.<\/span><\/div>\n<div><span>Anche la scelta di una struttura, anzich\u00e9 un&#8217;altra, in base alla situazione, porta all&#8217;ottimizzazione del codice che la gestir\u00e0.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span><span><b><span><u><\/u><\/span><u><\/u><\/b><u><\/u><\/span><u>COME SCEGLIERE LA STRUTTURA<\/u><\/span><u><\/u><\/b><u><b><span><\/span><\/b><\/u><b><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>La scelta della struttura dati pi\u00f9 adatta deve essere studiata dal programmatore e richiede la considerazione di diversi fattori<\/span><\/div>\n<div>\n<ul>\n<li><span>Risorse necessarie (<\/span><i><span>codice pi\u00f9 veloce o pi\u00f9 leggero?<\/span><\/i><span>)<\/span><\/li>\n<li><span>Inserimento degli elementi (<\/span><i><span>In testa, in coda o in ordine casuale?<\/span><\/i><span>)<\/span><\/li>\n<li><span>Prelievo degli elementi (<\/span><i><span>In testa, in coda o in ordine casuale?<\/span><\/i><span>)<\/span><\/li>\n<li><span>Eliminazione degli elementi (<\/span><i><span>In testa, in coda o in ordine casuale?<\/span><\/i><span>)<\/span><\/li>\n<\/ul>\n<div><span>Bisogna tener presente che l&#8217;uso di una particolare struttura dati pu\u00f2 favorire alcuni fattori ma pu\u00f2 essere poco pratica per altri. Questo vuol dire che non esiste la struttura perfetta ma quella pi\u00f9 adatta ad ogni situazione. Questo vuol dire che c&#8217;\u00e8, ad esempio, quella pi\u00f9 adatta all&#8217;ordinamento, quella migliore per il prelievo o quella migliore per l&#8217;inserimento.<\/span><\/div>\n<\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span><span><b><span><u><\/u><\/span><u><\/u><\/b><u><\/u><\/span><u>STRUTTURE DATI DINAMICHE<\/u><\/span><u><\/u><\/b><u><b><span><\/span><\/b><\/u><b><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Le strutture dati possono essere catalogate in base alle loro prestazioni nelle diverse situazioni o in base alle operazioni che \u00e8 possibile effettuare sulle stesse. Con il termine strutture dati dinamiche si intendono quelle particolari strutture che fanno uso dei puntatori e della locazione dinamica della memoria per la gestione dei propri elementi in fase di esecuzione. Ogni elemento \u00e8 in qualche modo connesso almeno ad un altro e tale connessione pu\u00f2 essere cambiata durante lo svolgimento del software. Qualora l&#8217;uso dei puntatori non fosse possibile si pu\u00f2 ricorrere ad altri sistemi che per\u00f2 peccano per carenza di flessibilit\u00e0.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Tra esse troviamo, ad esempio, liste, alberi, grafi e tabelle. Ognuna di esse sar\u00e0 analizzata in futuro in maniera approfondita.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span><span><b><span><u><\/u><\/span><u><\/u><\/b><u><\/u><\/span><u>CONTENITORI<\/u><\/span><u><\/u><\/b><u><b><span><\/span><\/b><\/u><b><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>I contenitori sono strutture derivate da quelle dinamiche e si concentrano in maniera particolare sulla gestione dell&#8217;inserimento e del prelievo dei dati presenti all&#8217;interno. L&#8217;accesso ai dati di queste strutture \u00e8 l&#8217;elemento che differisce tra ognuna di esse. C&#8217;\u00e8 chi preleva i dati in testa, chi in coda e chi in base ad un indice.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Tra esse troviamo, ad esempio, la pila o la coda. Ognuna di esse sar\u00e0 analizzata in futuro in maniera approfondita.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Abbiamo eseguito una breve carrellata di ci\u00f2 che si studier\u00e0 in questa sezione.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Alla prossima!!!<\/span><\/div>\n<div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Inauguriamo una nuova sezione del blog che avrei voluto iniziare gi\u00e0 diverso tempo addietro ma che, per mancanza di tempo, non ho mai cominciato a scrivere. La nuova sezione, particolarmente interessante per chi vuole approfondire la programmazione ad un livello pi\u00f9 alto, tratter\u00e0 le strutture dati. Per studiare gli algoritmi che gestiscono questi tipi di [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,4,57],"tags":[],"class_list":["post-172","post","type-post","status-publish","format-standard","hentry","category-algoritmi","category-opencode","category-strutture-dati"],"views":1055,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=172"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/172\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=172"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}