Komíny a LIFO Struktur: Realizace a Případy Použití

důležité tyto metody vysvětleny, umožňuje podívat se na finální realizaci naší třídy Stack:

push a pop metod se objeví přesně tak, jak očekáváme (lines13–32). Pomocí naší metody push můžeme vytvořit vlastní inicializátor s některými variadickými hodnotami (řádky 7-11). Navíc můžeme zkontrolovat prázdný zásobník kontrolou, zda má náš rootNode hodnotu (řádky 34-36) a má základní metodu tisku, která iteruje náš seznam, pokud je schopen přistupovat k uzlům prostřednictvím další vlastnosti(řádky 38-44).

základní test našeho stacku funkce vypadá takto:

Vědět, jak implementovat zásobník je jedna věc, ale ještě důležitější je, rozpoznání situací, pro které je zásobník dobře hodí. V této další části se podíváme na tři takové případy.

Případ Použití 1: Obrácení Pořadí

Protože pořadí zásobník je opravena, v opačném pořadí může být dosaženo velmi snadno objevovat prvky z jednoho zásobníku a okamžitě na další. Žádné pohráváte s swapování indexy!

případ použití 2: Testování symetrie

dalším dobrým případem použití zásobníků je testování symetrie. V níže uvedeném příkladu, testujeme řetězec závorek, abychom zajistili, že každá uzavírací konzola je správným protějškem dřívější Otevírací konzoly.

začneme kontrolou, že počet znaků je dělitelný dvěma, protože lichý počet znaků by byl okamžitě asymetrický (řádek 6). Dále zkontrolujeme, zda máme platný vstup definováním znakové sady nelegálních znaků a poté zkontrolujeme, zda náš vstupní řetězec má nulový rozsah nelegálních znaků (řádky 7-8). Chcete-li zkontrolovat, zda se naše uzavírací a otevírací závorky shodují, vložíme je do slovníku jako páry klíčových hodnot (řádek 10). V jiných situacích můžete být schopni vypočítat inverzní hodnotu, aniž byste museli ukládat páry do slovníku. Pak máme náš zásobník (řádek 11). Účelem našeho zásobníku je v tomto případě uložit Otevírací konzoly. Když iterujeme náš řetězec, můžeme zkontrolovat, zda je náš znak Otevírací závorkou, testováním, zda se jedná o klíč v našem slovníku. Pokud ano, zatlačíme ji na náš stoh. Jakmile najdeme naši první uzavřenou závorku, víme, že pracujeme přes druhou polovinu našeho vzoru, takže jsme nastavili naši první polovinu boolean na false (řádek 12). Pokud po tomto bodě najdeme další Otevírací závorky, můžeme zkontrolovat boolean a označit neúspěšný test. Pro každou uzavírací konzolu, vyskočíme Poslední Otevírací konzolu a zkontrolujeme, zda se jedná o správný pár klíč-hodnota. Ještě jednou, potřebujeme pouze iterovat přes řetězec jednou, takže získáváme hodně hodnoty z lineárního algoritmu.

Případ Užití 3: Zkáza Příkazy

a Konečně, budeme používat zásobníku ve spojení s příkazem vzor, vytvořit undo historie. Nejprve se podívejme na jednoduchý objekt bankovního účtu. Má zůstatek a limit kontokorentu a některé jednoduché metody pro ukládání a výběr finančních prostředků:

namísto přímého volání metod vkladu a výběru můžeme příslušné informace uložit do příkazu. V níže uvedeném úryvku specifikujeme, jaký druh akce chceme provést s majetkem enum (vklad nebo výběr) a částkou . Uložíme také boolean, abychom označili, zda byl příkaz proveden (řádky 4-11). Všimněte si, že pokud žádosti překročí limit kontokorentu, nic se nestane, na bankovní účet a podařilo boolean zůstane false, jinak to bude pravda, jakmile příkaz byl dokončen (řádky 18-26). Máme dvě metody pro volání nebo zrušení příkazu, z nichž každá bere bankovní účet jako argument (řádky 18 & 28). Tyto metody berou bankovní účet a nazývají jeho instanční metody, které jsme viděli v předchozím úryvku.

zpět na bankovní účet, můžeme nyní představit naši commandStack majetku, který má být inicializován s naší BankAccountType (řádek 47). Naše metody vkladu a výběru označujeme jako fileprivate, takže k nim lze přistupovat pouze naším příkazem BankAccountCommand (řádky 62 & 66). Nyní máme dvě exponované metody: process (command:) a undoLastCommand (). První přijme příkaz jako vstup, provede jej s bankovním účtem jako vstupem a poté tlačí příkaz do zásobníku. Mezitím metoda undoLastCommand, vyskočí poslední příkaz ze zásobníku a provede zpět (čáry 51-60).

Jedná se o velmi jednoduchý vzor a ten, který je velmi silný. Možné aplikace jsou nekonečné a přispívají k uspokojivému uživatelskému zážitku.

A teď se pojďme podívat vzor v akci:

Zabalit

V tomto článku jsme se zabývali koncept zásobníku a LIFO chování. Implementovali jsme vlastní zásobník pomocí dvojitě propojeného seznamu a ukázali jsme, jak přiděluje a přerozděluje paměť jako velikost změn zásobníku. Podívali jsme se také na tři běžné případy použití zásobníků: couvání, testování symetrie a vrácení zpět. Každá z těchto tří situací se v reálných projektech objevuje nesčetněkrát. Doufám, že budete myslet na stohu jako vhodnou strukturu pro řešení těchto potřeb. Jako vždy, děkuji za přečtení!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

More: