Pole (datová struktura)
Pojmem pole (také vektor) se v informatice označuje datová struktura, která sdružuje daný vždy konečný počet prvků (čísel, textových řetězců, …) stejného datového typu. K jednotlivým prvkům pole se přistupuje pomocí jejich indexu (celého čísla, označujícího pořadí prvku v rámci pole). Velikost pole zůstává při běhu programu neměnná (některé programovací jazyky toto omezení nekladou, zvětšení pole je ale časově náročná operace).
Ve většině programovacích jazyků je pole vestavěným datovým typem (viz též abstraktní datový typ).
Operace s polem
- přístup k prvku – probíhá v konstantním čase, tj. ; pomocí indexu lze vypočítat přesnou adresu v paměti (vizte pointerovou aritmetiku)
- vyhledávání prvku – (lineární vyhledávání) je řešitelné v lineárním čase, tj. ; v nejhorším případě je nutné projít celé pole
- vyhledávání prvku v seřazeném poli – hledání metodou půlení intervalu indexů pole (binární vyhledávání) má logaritmickou časovou složitost, tj.
Indexování prvků
Různé programovací jazyky se (mimo jiné) liší v tom, jakým indexem označují první prvek pole:
- C, C++, C#, Java a další indexují od nuly (a index vynásobený velikostí prvku v bytech vyjadřuje posunutí příslušného prvku v paměti od počátku pole).
- BASIC a další indexují od jedničky, což odpovídá matematickému značení a přirozenému počítání.
- Visual Basic, Pascal a další umožňují nastavit horní a dolní meze pole individuálně.
Syntax pro zápis indexů
Kromě způsobu indexování prvků se jazyky liší také syntaxí zápisu indexů. Řada programovacích jazyků pro indexy používá kulaté závorky, např. Tabulka(i,j)
. Další jazyky (např. Algol, Pascal a jazyky z nich odvozené), používají hranaté závorky, např. Tabulka[i,j]
. Důvodem je i syntakticky na první pohled odlišit přístup k prvkům pole od jiných programových konstrukcí, kde se používají kulaté závorky. Z ukázek je rovněž zřejmé, že indexem pole může být (a zpravidla bývá) proměnná, tj. konkrétní hodnota indexu je spočtena až za běhu programu. Pochopitelně lze jako index použít také konstantu, např.
Tabulka(2,3)
, resp. Tabulka[2,3]
. Typické je ale právě použití proměnných v kombinaci s příkazem cyklus for (případně jinými řídícími strukturami pro cyklus).
Použití
Pole jsou jedním z nejzákladnějších datových typů, mají tedy široké použití nejen samy o sobě, ale také jako součást komplexnějších struktur, jako jsou haldy, hašovací tabulky či řetězce.
Vícerozměrná pole
V praktických úlohách, zejména v náročnějších výpočetních a grafických aplikacích, se uplatňují i vícerozměrná pole. Ta se indexují uspořádanou k-ticí celých čísel (souřadnic) – např. a[3, 2, 5]
. Obzvláště často se používají dvourozměrná pole (matice), jen zřídka se v praxi používá počet rozměrů větší než tři.
Některé jazyky vícerozměrná pole nepodporují přímo, ale reprezentují je pomocí pole polí, např. dvourozměrná matice se vyjádří jednorozměrným polem řádků, z nichž každý obsahuje pole, které obsahuje již položky tohoto řádku (výše zmíněný příklad prvku trojrozměrné matice pak je a[3][2][5]
).