Datastructuren: array, gelinkte lijst, stack, queue
Een datastructuur is een manier om gegevens zo te ordenen dat een programma ze snel en gemakkelijk kan gebruiken.
- Array: vaste grootte, de items staan naast elkaar en elk item is te bereiken met zijn index (a[3]). Iets in het midden toevoegen gaat langzaam.
- Gelinkte lijst (dynamisch): elk knooppunt bewaart een waarde en een verwijzing naar het volgende knooppunt. De lijst groeit en krimpt zoals nodig, maar om bij item 5 te komen moet je langs item 1 tot en met 4 lopen.
- Stack: push en pop gebeuren alleen aan één kant (LIFO). Gebruikt voor ongedaan maken, de terugknop en het controleren van haakjes.
- Queue: toevoegen achteraan, verwijderen vooraan (FIFO). Gebruikt voor printopdrachten en wachtrijen.
Bibliotheken (libraries) bevatten deze hulpmiddelen al. In Python werkt een list als stack (append, pop) en collections.deque als snelle queue. Gebruik een bibliotheek als die bestaat; schrijf het niet opnieuw.
stack = []
stack.append(5); stack.append(8)
stack.pop() # gives 8
from collections import deque
q = deque([4, 9]); q.append(2)
q.popleft() # gives 4
Een IDE gebruiken: schrijven, uitvoeren, testen
Een IDE (integrated development environment, ontwikkelomgeving) brengt een editor, een startknop, een debugger en andere hulpmiddelen samen op één plek. Hij kleurt je code, stelt namen voor en laat fouten zien terwijl je typt.
- Uitvoeren: start het programma en lees de uitvoer.
- Testen: probeer makkelijke, gewone en lastige invoer (een lege lijst, nul, een heel groot getal).
- Debuggen: zet een breekpunt en loop regel voor regel door de code om de variabelen te volgen.
2D- en 3D-visualisatie en animatie
Plaatjes helpen ons patronen te zien. Programma's kunnen grafieken tekenen (staaf, lijn, spreidingsdiagram), 2D-tekeningen en 3D-scènes. Een animatie is steeds hetzelfde plaatje, telkens met een kleine verandering opnieuw getekend (ongeveer 30 tot 60 keer per seconde). Een eenvoudige aanpak: bewaar een variabele zoals x, tel er bij elk beeld een beetje bij op en teken opnieuw. Het 3D-model op deze pagina is op dezelfde manier gemaakt, met een 3D-bibliotheek.
Geavanceerde spreadsheetfuncties
Spreadsheets kunnen met functies werk doen dat lijkt op programmeren:
IF(B2>=50,"Pass","Fail")kiest tussen twee uitkomsten (in een Nederlandstalig programma heet dit ALS).SUMIF(B2:B5,">=50")telt alleen de cellen op die aan een regel voldoen;COUNTIFtelt ze.VLOOKUP(2, A2:B5, 2, FALSE)zoekt 2 in de eerste kolom en geeft de waarde uit kolom 2 van dezelfde rij.XLOOKUPdoet hetzelfde, maar makkelijker.- Draaitabellen (pivot tables) vatten grote hoeveelheden gegevens samen per groep en grafieken tonen het resultaat.
Relationele databases en SQL
Een relationele database bewaart gegevens in tabellen met rijen en kolommen. Elke tabel heeft een primaire sleutel, een kolom waarvan de waarden uniek zijn (het id). Een andere tabel gebruikt die waarde als vreemde sleutel om terug te verwijzen. Een goed ontwerp bewaart elk feit één keer, zodat er geen dubbele gegevens zijn.
SQL is de taal om vragen te stellen en gegevens te veranderen:
SELECT name, score FROM students
JOIN marks ON students.id = marks.id
WHERE score >= 50 ORDER BY score DESC;
INSERT INTO marks (id, score) VALUES (5, 67);
UPDATE marks SET score = 55 WHERE id = 2;
DELETE FROM marks WHERE id = 5;Integriteit betekent dat de gegevens correct blijven: sleutels zijn uniek, een vreemde sleutel moet bij een bestaande rij horen en waarden moeten het juiste type hebben. Beveiliging betekent wachtwoorden voor gebruikers, elke gebruiker alleen de rechten geven die hij nodig heeft, back-ups maken, en nooit SQL opbouwen door tekst van gebruikers aan de query te plakken (gebruik parameters). Dat voorkomt SQL-injectie.
Bijdragen aan open bronnen
Veel hulpmiddelen en bibliotheken zijn open source: iedereen mag ze lezen, gebruiken en verbeteren onder een licentie. Jij kunt helpen door een fout te herstellen, een handleiding te verbeteren, een pagina te vertalen of een voorbeeld toe te voegen. Lees altijd de licentie, vermeld de maker en schrijf duidelijke, beleefde berichten als je een wijziging voorstelt.
Probeer het zelf
Zet in 3D-stap 5 drie items op een stack en haal ze er dan weer af (pop). Schrijf de volgorde op. Doe hetzelfde met een queue. Voorspel daarna eerst en controleer dan: na het toevoegen van 4, 9 en 2 en het verwijderen van één item, welke waarde staat dan vooraan in de queue en bovenaan de stack?
Belangrijke formules en begrippen
- Stack = LIFO (last in, first out): push, pop.
- Queue = FIFO (first in, first out): enqueue, dequeue.
- Array: vaste grootte, toegang via index. Gelinkte lijst: dynamische grootte, volg de verwijzingen.
- SELECT columns FROM table WHERE condition
- Primaire sleutel = uniek id. Vreemde sleutel = verwijzing naar een andere tabel.
Uitgewerkte voorbeelden
1. De items 5, 8 en 2 worden in deze volgorde op een stack gezet (push). Daarna wordt twee keer pop uitgevoerd. Wat staat er nu bovenaan?
Stack na de pushes: 5, 8, 2 (2 bovenaan). Pop haalt eerst 2 weg, dan 8. Over: 5. Bovenaan staat 5.
2. De items 4, 9, 2 sluiten in deze volgorde aan in een queue. Er wordt één keer dequeue uitgevoerd. Welk item staat nu vooraan?
Wie als eerste kwam, vertrekt, dus 4 wordt verwijderd. Vooraan staat nu 9.
3. Tabel met cijfers: id 1 tot 4 met scores 72, 45, 88, 51. Hoeveel rijen geeft WHERE score >= 50?
72, 88 en 51 zijn 50 of meer. Dat zijn 3 rijen.
4. De cellen B2:B5 bevatten 72, 45, 88, 51. Wat geeft =SUMIF(B2:B5,">=50")?
Het telt alleen 72, 88 en 51 op: 72 + 88 + 51 = 211.
5. Waarom gebruik je een stack om haakjes zoals ( [ ] ) in een uitdrukking te controleren?
Zet elk openend haakje op de stack. Komt er een sluitend haakje, haal dan het bovenste weg en controleer of het erbij hoort. Het laatst geopende haakje moet als eerste gesloten worden (LIFO), en dat is precies wat een stack geeft. Is de stack aan het eind leeg, dan kloppen de haakjes.
Veelgemaakte fouten
- Een array gebruiken als je de grootte vooraf niet weet. Een lijst of gelinkte lijst is dan beter.
- Stack en queue door elkaar halen. Een stack verwijdert het nieuwste item; een queue verwijdert het oudste.
- WHERE vergeten bij UPDATE of DELETE, waardoor elke rij verandert.
- SQL opbouwen door tekst van gebruikers aan een string te plakken. Gebruik parameters.