näiden tärkeiden menetelmien avulla voidaan tarkastella Pinoluokan lopullista toteutusta:
push – ja pop-menetelmät näyttävät juuri sellaisilta kuin odotammekin (linjat13–32). Voimme käyttää push-menetelmäämme luodaksemme mukautetun alustajan, jolla on vaihtelevia arvoja (linjat 7-11). Lisäksi voimme tarkistaa tyhjän pinon tarkistamalla, onko meidän rootNode on arvo (rivit 34-36) ja on perus tulostaa menetelmä, joka iterates läpi luettelon niin kauan kuin se voi käyttää solmuja läpi seuraavan ominaisuuden (rivit 38-44).
pinon toimivuuden perustesti näyttää tältä:
pinon toteuttamisen osaaminen on eri asia, mutta vielä tärkeämpää on tunnistaa tilanteet, joihin pino sopii hyvin. Seuraavassa jaksossa tarkastelemme kolmea tällaista tapausta.
Käyttötapaus 1: Peruutusjärjestys
koska pinon järjestys on kiinteä, Käänteinen järjestys voidaan saavuttaa hyvin helposti poksauttamalla elementtejä yhdestä pinosta ja välittömästi toiseen. Ei pelleilyä indeksien vaihtamisen kanssa!
Käyttötapaus 2: symmetrian testaaminen
toinen hyvä käyttötapaus pinoille on symmetrian testaaminen. Alla olevassa esimerkissä testaamme kiinnikkeiden jonoa varmistaaksemme, että jokainen sulkukiinnike on oikea vastine aiemmalle avauskiinnikkeelle.
aloitetaan tarkistamalla, että merkistö on jaollinen kahdella, koska pariton määrä merkkejä olisi heti epäsymmetrinen (rivi 6). Seuraavaksi tarkistamme, että meillä on kelvollinen syöte määrittelemällä merkistö laittomista merkeistä ja tarkistamalla sitten, että syötemerkkijonossamme on nolla laittomien merkkien valikoimaa (rivit 7-8). Jos haluat tarkistaa, että suluissa ja suluissa on vastaavuus, laitamme ne sanakirjaan avainarvopareina (rivi 10). Muissa tilanteissa voit ehkä laskea käänteisen arvon ilman, että sinun tarvitsee tallentaa pareja sanakirjaan. Sitten meillä on meidän pino (rivi 11). Tarkoituksena meidän pino tässä tapauksessa on tallentaa avaaminen suluissa. Kun toistamme kautta merkkijono voimme tarkistaa, jos meidän merkki on avauskiinnike testaamalla, jos se on avain meidän sanakirja. Jos on, työnnämme sen pinoomme. Kun löydämme ensimmäisen suljetun kiinnikkeen, tiedämme, että työskentelemme läpi jälkipuoliskolla meidän kuvio, joten asetamme firstHalf boolean false (rivi 12). Jos löydämme lisää avaus suluissa tämän pisteen jälkeen voimme tarkistaa Boolen ja osoittaa epäonnistunut testi. Kunkin sulkeminen kiinnike, pop pois viimeinen avaus kiinnike ja tarkistaa, jos ne ovat oikea avain-arvo pari. Jälleen kerran meidän tarvitsee iteroida merkkijonon läpi vain kerran, joten saamme paljon arvoa lineaarisesta algoritmista.
käytä tapausta 3: perutaan komennot
lopuksi käytämme pinoa yhdessä komentokuvion kanssa luodaksemme perumishistorian. Aluksi, Katsotaanpa katsomaan yksinkertainen pankkitili objekti. Siinä on saldo ja tilinylitysraja ja joitakin yksinkertaisia tapoja tallettaa ja nostaa varoja:
sen sijaan, että soittaisimme talletus-ja nostotapoihin suoraan, voimme tallentaa olennaiset tiedot komentoon. Alla olevassa katkelmassa määritämme, millaista toimintaa haluamme suorittaa enum-ominaisuudella (talletus tai nosto) ja määrällä . Tallennamme myös Boolen, joka kertoo, onko komento voitu suorittaa (linjat 4-11). Huomaa, että jos nostopyyntö ylittää tilinylitysrajan, pankkitilille ei tapahdu mitään ja seurattu Boolen pysyy vääränä, muuten se muuttuu todeksi komennon päätyttyä (rivit 18-26). Komennon soittamiseen tai kumoamiseen on kaksi tapaa, joissa kummassakin käytetään argumenttina pankkitiliä (rivit 18 & 28). Nämä menetelmät ottavat pankkitilin ja soittaa sen esimerkiksi menetelmiä, jotka näimme edellisessä pätkä.
palataksemme pankkitilille, voimme nyt ottaa käyttöön commandStack-ominaisuutemme, joka on alustettu Pankkitiliemme (rivi 47) kanssa. Merkitsemme talletus-ja nostomenetelmämme fileprivateksi, jotta niihin pääsee käsiksi vain Pankkitilikommentillamme (rivit 62 & 66). Nyt meillä on kaksi altistunutta menetelmää: process(command:) ja undoLastCommand(). Ensimmäinen hyväksyy komennon syötteenä, suorittaa sen pankkitilin syötteenä ja työntää komennon sitten pinoon. Samaan aikaan undoLastCommand menetelmä, ponnahtaa viimeinen komento pois pinosta ja suorittaa kumoa (rivit 51-60).
tämä on hyvin yksinkertainen ja hyvin voimakas kuvio. Mahdolliset sovellukset ovat rajattomia ja tekevät tyydyttävästä käyttökokemuksesta.
ja nyt katsotaan mallia toiminnassa:
Wrap Up
tässä artikkelissa pureuduimme pino-ja LIFOKÄYTTÄYTYMISEN käsitteeseen. Toteutimme Oman pinomme käyttämällä kaksinkertaisesti linkitettyä listaa ja osoitimme, miten se jakaa ja deallocates muistia pinon koon muuttuessa. Tarkastelimme myös kolmea yleistä käyttötapausta pinoille: kääntämistä, symmetrian testaamista ja kumoamista. Jokainen näistä kolmesta tilanteesta tulee esiin lukemattomia kertoja reaalimaailman projekteissa. Toivon, että pidätte pinoa sopivana rakenteena näiden tarpeiden täyttämiseksi. Kuten aina, kiitos lukemisesta!