Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam – velmi často používaná datová struktura Práce se spojovými seznamy Způsob práce se spojovým seznamem a konkrétní složitost obslužných algoritmů jsou závislé na použité organizaci seznamu. SYSTÉMOVÁ TŘÍDA SIMSET
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Jednosměrný spojový seznam Jedná se o nejjednodušší strukturu realizující spojový seznam. Každý prvek odkazuje na svého následníka a je zpřístupněn jednou referenční proměnnou, která odkazuje na první prvek. Zpřístupňující proměnná Odkaz na následující prvek seznamu Obsah položky
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Dvousměrný spojový seznam Každý prvek odkazuje jak na svého předchůdce, tak na svého následníka a zpřístupnění je možné na jednom či druhém či obou koncích. Singulární případy při zařazování či ubírání na některém z konců seznamu. Zpřístupňují proměnné Odkaz na následující prvek seznamu Obsah položky Odkaz na předcházející prvek seznamu
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Kruhový spojový seznam Singulární případy lze zamezit kruhovou organizací seznamu,tj. první prvek prohlásíme definitoricky následníkem posledního prvku a poslední prvek předchůdcem prvního. Ke zpřístupnění „ obou konců“ kruhového seznamu stačí jediná referenční proměnná. Zpřístupňující proměnná
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Reprezentace prázdného seznamu Zbývající singularita – práce s „ prázdným seznamem“, tj. zařazování prvního a vyjímání poslední prvku seznamu. Odstranění – přidání speciálního prvku, který nebudeme počítat mezi prvky seznamu a který nebudeme nikdy ze seznamu vypouštět Speciální prvek
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Prázdný seznam v tomto pojetí bude reprezentován seznamem (stále kruhovým) obsahující pouze zmíněný speciální prvek.
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Filozofie třídy SIMSET Popsané pojetí cyklických kruhových seznamů obsahujících speciální prvek, který nebudeme počítat mezi vlastní členy seznamu budeme nazývat hlavou seznamu. Základní datová struktura – stejná jak pro prvky seznamu tak pro jeho hlavu, tj. odpovídající datový prototyp musí obsahovat dvě složky pro referenční odkazy na následníka a předchůdce v seznamu. Prefixační systém jazyka PC-SIMULA umožňuje, aby datové prototypy vlastních prvků seznamu a jeho hlavy byly kvalifikačně odlišné, tj. ke třídě základní datové struktury vytvoříme dvě podtřídy: prototyp hlav seznamů prototyp vlastních prvků seznamů
SIMULACE DISKRÉTNÍCH SYSTÉMŮ V třídě SIMSET je takové kvalifikační odlišení realizováno. základní datový prototyp – třída linkage o podtřída prototyp hlav seznamů – třída head o podtřída prototyp vlastních prvků seznamu – třída link linkage headlink
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Deklarace systémové třídy SIMSET : class Simset; begin class linkage begin ref (linkage) SUC, PRED; …. end; linkage class head; …; linkage class link; …; end ;
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Deklarace třídy linkage: - základní prototyp struktury řazené do kruhového dvousměrného seznamu class linkage; begin ref(linkage) SUC, PRED; ref(linkage) procedure suc; suc:-if SUC in link then SUC else none; ref(linkage) procedure pred; pred:-if PRED in link then PRED else none; ref(linkage) procedure prev; prev:- PRED; end ; - identifikátory složené z velkých písmen označují uživateli nedostupné veličiny
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Třída head: - prototyp hlavy seznamu, nerozšiřuje třídu linkage - z uživatelského hlediska je celý seznam reprezentován (zpřístupňován) právě hlavou. Procedury: procedure first – funkční hodnotou je odkaz na první položku v seznamu, pro prázný seznam nabývá hodnoty none procedure last – odkazuje na poslední položku seznamu, pro prázný seznam nabývá hodnoty none procedure empty – nabývá hodnoty true při prázdném seznamu procedure cardinal – funkční hodnotou je celé číslo udávající počet položek seznamu procedure clear – odstraňuje všechny položky ze seznamu
SIMULACE DISKRÉTNÍCH SYSTÉMŮ Třída link: - Prototyp exemplářů chápaných jako vlastní prvky spojového seznamu. Obsahuje pouze deklarace lokálních procedur – nerozšiřuje třídu linkage - pouze kvalifikační odlišení vlastních prvků spojového seznamu od jeho hlavy – rozdíl jen v obslužných procedurách Procedury: procedure out – odstraňuje položku ze seznamu procedure into(S) – zařazuje položku na konec seznamu procedure follow(X) – zařazuje položku do seznamu za objekt odkazovaný parametrem X procedure precede(X) – zařazuje položku do seznamu před objekt odkazovaný parametrem X