InformáticaTécnico Auxiliar de Informática (TAI)

Tipus de Dades i Estructures: El Fonament de la Programació



Has pensat mai què passa realment dins de l’ordinador quan prems «Guardar» o quan executes una aplicació? Tot aquest món digital es basa en alguna cosa tan senzilla a primera vista, però increïblement complexa en la seva gestió: les dades. En aquest article, ens endinsarem per entendre com organitzem, estructurem i donem vida a aquests elements que són la base de qualsevol sistema informàtic.

Què és realment un Dada? Més enllà dels símbols

Anem al gra. Una dada, per si sola, és com una peça de puzle perduda. És un conjunt de símbols (poden ser números, lletres o senyals) que representen un fet o un valor. Però aquí ve el curiós: per si mateixa, la dada no té significat. És només informació en brut, com lletres soltes d’un scrabble.

En programació, el que fem és donar-li context. Definim un «tipus de dada» per dir-li a l’ordinador: «Ep, això que t’estic donant és un número» o «Això és text». Això determina quins valors pot prendre i, el més important, quines operacions podem fer amb ella. No és el mateix sumar dos números que intentar sumar dues paraules (tot i que en alguns llenguatges es pot concatenar, ja m’entens).

L’art de l’abstracció: Simplificant la complexitat

Abans de continuar, hem de parlar d’un concepte clau que els programadors utilitzen constantment: l’abstracció. Imagina que condueixes un cotxe. Saps que en prémer el pedal el cotx avança, però no necessites saber com funciona el motor de combustió interna metre a metre. Estàs fent abstracció: t’importa el què fa, no el com ho fa.

En informàtica, l’abstracció ens permet aïllar una part del problema per tractar-la sense preocupar-nos de la resta. Això és vital perquè, d’aquesta manera, podem construir estructures complexes com si fossin blocs de LEGO, sabent que cada bloc funciona correctament sense haver de repassar-ne l’interior cada vegada que el fem servir. És el primer nivell per alliberar-nos de les cadenes del maquinari i centrar-nos en la lògica.

Tipus Bàsics de Dades: Els maons de la construcció

Si les estructures de dades són edificis, els tipus bàsics són els maons i el ciment. Quins són els més habituals?

Nombres enters i reals: Precisió i emmagatzematge

Primer tenim els Enters. Són els números sense decimals: 1, -5, 42. Sembla senzill, però hi ha un límit. L’ordinador no té infinita memòria, així que no pot representar tots els números del món. El rang que podem guardar depèn dels bits que utilitzem. Si et quedes curt de bits, tindràs problemes de desbordament (overflow).

Per altra banda, tenim els Reals (o coma flotant). Aquí és on les coses s’interessen. Vols guardar el número Pi complet? Oblida-te’n. Com que entre dos enters hi ha infinits números reals, l’ordinador ha de fer un redondeig. És per això que de vegades els càlculs amb decimals donen errors estranys. Per a això existeixen tipus com el double o el float, que ens donen més precisió (més decimales) a costa de més memòria.

Lògics i Caràcters: Les decisions i el text

Els tipus Lògics o booleans són la brúixola del programa. Només poden ser veritable o fals (0 o 1). Són els amos de les decisions: «Si és veritable, gira a l’esquerra; si és fals, gira a la dreta». Sense ells, un programa no sabria què fer davant d’una bifurcació.

Finalment, els Caràcters. Un sol símbol, com una lletra o un signe. Quan ajuntem molts caràcters, obtenim un String o cadena de text. Aquesta estructura és tan comuna que molts llenguatges la tracten com a tipus bàsic, permetent-nos operar sobre ella: buscar paraules, tallar textos, etc.

Estructures de Dades: Organitzant el caos

Un cop tenim les dades bàsiques, necessitem organitzar-les. Aquí és on entren en joc les Estructures de Dades. No podem deixar els llibres escampats per terra; necessitam prestatgeries.

Arrays: Vectors i Matrius

L’Array és potser l’estructura més antiga i coneguda. Imagina una taula on cada casella té un número (índex). L’array emmagatzema una col·lecció d’elements sota un mateix nom. En molts llenguatges, aquesta col·lecció és homogènia (tot del mateix tipus) i estàtica (tenim un nombre fix de caselles).

  • Vector: És un array d’una sola dimensió. Una fila de caselles.
  • Matriu: És un array de dues dimensions, com un tauler d’escacs amb files i columnes.

El gran avantatge és que accedir a qualsevol element és immediat si coneixes l’índex. Però compte! Si vols inserir un element al mig, has de moure tots els altres per fer-li lloc. És el preu de l’ordre.

Punters: El GPS de la memòria

Aquí és on molts estudiants comencen a suar. Un punter és simplement una variable que en lloc de guardar un valor (com un número), guarda una adreça de memòria.

És com si tens un paper que no diu «La resposta és 42», sinó que diu «La resposta està a la caixa forta número 52F930DB». Amb el punter, no llegeixes el valor directament, sinó que vas a l’adreça on està guardat. Això és una eina potentíssima per construir estructures dinàmiques, ja que ens permet enllaçar peces de memòria que estan separades físicament.

Tipus Abstractes de Dades (TAD): La revolució conceptual

Arribats a aquest punt, fem un salt qualitatiu. Un Tipus Abstracte de Dades (TAD) és un model matemàtic que defineix un conjunt de dades i les operacions que es poden fer sobre elles, amagant els detalls de com està fet per dins.

És el paradigma de l’abstracció aplicat a les dades. Tu saps que una Pila et deixa posar i treure coses pel damunt, però no saps (ni et cal saber) si per dins està feta amb un array o amb una llista enllaçada.

Un TAD es compon de tres parts:

  1. Domini: Quins valors pot tenir.
  2. Operacions: Què podem fer amb ell (afegir, esborrar, etc.).
  3. Semàntica: Què fan exactament aquestes operacions.

Aquest concepte, proposat per Barbara Liskov el 1975, va ser el precursor de la programació orientada a objectes tal com la coneixem avui.

Estàtic vs. Dinàmic: On viuen les dades?

Les estructures poden ser:

  • Estàtiques: Se sap quantes dades hi haurà abans d’executar el programa. Reservem la memòria i punt.
  • Dinàmiques: No sabem quantes dades tindrem. Pot haver-n’hi una, deu o un milió. La memòria es va demanant a mesura que es necessita (gràcies als punters!). Això és crucial per a estructures com les llistes o els arbres.

Llistes: La flexibilitat en moviment

Una Llista és una estructura dinàmica i ordenada. A diferència de l’array, aquí els elements no estan junts en memòria, sinó que estan «enllaçats». Cada element (node) té:

  1. Una dada.
  2. Un punter que li diu on és el següent.

Això ens permet inserir i esborrar elements en qualsevol lloc sense moure la resta de l’estructura. Només canviant les fletxes (punters), ja ho tens!

Llistes enllaçades: Simples, dobles i circulars

  • Simples: Cada node apunta al següent i prou. Només pots avançar cap endavant.
  • Dobles: Cada node apunta al següent i a l’anterior. Pots anar i venir.
  • Circulars: L’últim node apunta al primer. No hi ha final, és un cercle infinit!

Piles i Cues: Ordre d’arribada i sortida

Dins de les llistes, hi ha dos tipus especials amb regles estrictes:

  • Piles (LIFO – Last In, First Out): Imagina una pila de plats a la cuina. L’últim que posa és el primer que treus. És vital per a moltes funcions del sistema operatiu, com desfer accions.
  • Cues (FIFO – First In, First Out): Com la cua del cinema. El primer que arriba és el primer que entra. Justícia pura!

Operacions bàsiques amb llistes

Treballar amb llistes implica gestionar aquests punters amb cura:

  • Inserir: Si ho fas al principi, el punter «inici» ha de passar a apuntar al nou element. Si ho fas al mig, has de fer que l’anterior apunti al nou i el nou al següent.
  • Eliminar: L’operació inversa. Has de «saltar» el node que vols borrar, fent que l’anterior apunti directament al següent, i després alliberar la memòria del node sobrer.

Arbres: Estructures jeràrquiques

Deixa de pensar en línies rectes. Pensa en un arbre genealògic o en l’organigrama d’una empresa. Això és un Arbre en informàtica. És una estructura no lineal on cada element (node) pot tenir «fills».

Conceptes clau:

  • Arrel: El node pare de tots, al damunt de tot.
  • Fulles: Els nodes que no tenen fills, els de baix de tot.
  • Altura: La distància màxima des de l’arrel fins a una fulla.

Els arbres són fantàstics per representar jerarquies (com el sistema de fitxers del teu ordinador: C:/ > Usuaris > Document).

Recorreguts en arbres: Profunditat i Amplitud

Com recorres un arbre? No és tan fàcil com una llista on vas un per un. Hi ha estratègies:

  1. Pre-ordre: Visites el node actual, després fills.
  2. In-ordre: Visites el fill esquerre, després el node actual, després el dret.
  3. Post-ordre: Visites tots els fills i al final el node actual.
  4. Amplitud: Vas nivell per nivell, com llegint un llibre: primer l’arrel, després tots els seus fills, després els néts…

Grafs: Connexions sense límits

Finalment, arribem als Grafs. Si un arbre és una jerarquia, un graf és una xarxa. Imagina un mapa de metro o les amistats d’una xarxa social.

Els grafs estan formats per Nodes (vèrtexs) i Arestes (connexions). A diferència dels arbres, aquí no hi ha una «arrel» ni una jerarquia obligatòria. Pots tenir cicles (tornar al punt de partida) i connexions en qualsevol direcció. És l’estructura més flexible i potent per resoldre problemes complexos com trobar la ruta més curta en un GPS.

Conclusió

Com hem vist, el món de les dades no és només emmagatzemar zeros i uns. És tot un art d’organització. Des dels tipus bàsics, que són les lletres del nostre alfabet, fins a les estructures complexes com arbres i grafs, que són les novel·les completes, triar l’estructura adequada pot significar la diferència entre un programa lent i ineficient i una aplicació ràpida i potent. L’abstracció ens permet gestionar aquesta complexitat sense embogir, amagant els detalls tècnics perquè ens puguem centrar en resoldre problemes reals. Ara, la propera vegada que utilitzis una app, recorda que sota el capó hi ha milers de punters, nodes i estructures treballant en equip per a tu.

Preguntes Freqüents (FAQs)

1. Quina és la diferència principal entre un Array i una Llista? La diferència clau rau en la memòria. Un Array és estàtic i reserva memòria contigua; has de saber la mida abans. Una Llista és dinàmica, els elements poden estar dispersos en memòria i enllaçats mitjançant punters, permetent créixer o disminuir durant l’execució.

2. Què vol dir que una estructura de dades és «homogènia»? Vol dir que tots els elements que composen l’estructura són del mateix tipus. Per exemple, en un array homogeni només hi pots guardar enters; no pots barrejar enters amb text o booleans.

3. Per què és important l’abstracció en els Tipus Abstractes de Dades (TAD)? L’abstracció és crucial perquè permet separar el què fa una estructura del com ho fa. Això facilita el manteniment del codi, permet canviar la implementació interna sense afectar els programes que l’utilitzen i redueix la complexitat cognitiva del programador.

4. Què és un «Overflow» en una Pila? L’overflow (desbordament) es produeix quan s’intenta afegir un element a una pila que ja està plena, superant la capacitat de memòria assignada. Això pot fer que el programa es tanqui inesperadament o, en casos de seguretat, permetre atacs si es sobreescriu memòria adjacent.

5. En un arbre binari, quin recorregut s’utilitza per obtenir els elements ordenats? Generalment, el recorregut in-ordre (fill esquerre, arrel, fill dret) s’utilitza per obtenir els elements d’un arbre binari de cerca en ordre ascendent o descendent, ja que visita els nodes seguint l’ordre lògic dels valors.