Duomenų struktūra naudoja skirtingus iš anksto nustatytus metodus duomenims saugoti, gauti ir ištrinti, o tai baigiasi veiksmingų programų kūrimu. Susietas sąrašas yra populiari duomenų struktūra, kurią sudaro susietų (arba susietų) mazgų sąrašas.
Bet kaip sukurti susietą sąrašą „Java“? Pažiūrėkime.
Kiekvienas susietas sąrašas prasideda nuo specialaus mazgo, kuris dažnai vadinamas „galva“, kuris privalo visą laiką nurodyti sąrašo pradžią. Galva yra svarbi, nes kiekvienam susieto sąrašo mazgui nereikia fiziškai sekti jo įpėdinio (tai reiškia, kad pirmtakas ir įpėdinis neturi būti fiziškai greta).
Kaip ir kiekviena duomenų struktūra, susietas sąrašas palengvina kūrimą, paiešką, įterpimą ir sunaikinimą per iš anksto nustatytų funkcijų rinkinį, kurį gali naudoti bet kuris kūrėjas.
„Java“ programa, skirta susietiems sąrašams kurti ir jais manipuliuoti, turės tris išskirtinius skyrius; mazgų klasė, susietų sąrašų klasė ir tvarkyklė. Nors šie trys skyriai gali būti sujungti į vieną failą, kompiuterių moksle yra dizaino principas, žinomas kaip „rūpesčių atskyrimas“, kurį turėtų žinoti kiekvienas kūrėjas.
Susirūpinimo atskyrimo principas reikalauja, kad kiekviena kodo dalis, skirta konkrečiam klausimui, turėtų būti atskirta. Šis principas padės sukurti švaresnį (labiau įskaitomą) kodą ir idealiai tinka duomenų struktūroms kurti.
Pirmasis žingsnis kuriant susietą sąrašą „Java“ yra sukurti mazgų klasę. Mazgų klasė turi turėti du atributus; vienas iš atributų parodys mazgo duomenų dalį, o kitas atributas - susietą dalį. Mazgų klasė taip pat turėtų turėti konstruktorių, getterius ir setterius.
Susijęs: Sužinokite, kaip kurti klases „Java“
Gavėjai ir nustatytojai leis kitoms klasėms (pvz., Susietųjų sąrašų klasei) pasiekti įvairius susieto sąrašo mazgus.
Mazgų klasės pavyzdys
Žemiau pateikiamas mazgų klasės pavyzdys, kad suprastumėte, ką turime omenyje:
viešosios klasės mazgas {
privatūs int Duomenys;
privatus mazgas NextNode;
//constructor
public Node () {
Duomenys = 0;
NextNode = null;
}
// getters ir setters
public int getData () {
grąžinti duomenis;
}
public void setData (int duomenys) {
Duomenys = duomenys;
}
public Node getNextNode () {
return NextNode;
}
public void setNextNode (Mazgas nextNode) {
NextNode = nextNode;
}
}
Šiame pavyzdyje duomenų atributas išsaugos sveikųjų skaičių reikšmes. Dabar, kai turite mazgų klasę, laikas pereiti prie susieto sąrašo.
Žemiau pateikiamas susieto sąrašo „Java“ pavyzdys.
viešosios klasės „LinkedList“ {
privati mazgo galvutė;
//constructor
public LinkedList () {
Galva = nulis;
}
}
Aukščiau pateiktas kodas sukurs susietą sąrašo klasę, tačiau be įvairių operacijų klasė gali būti laikoma tuščio apvalkalo atitikmeniu. Susietą sąrašo duomenų struktūrą sudaro kelios operacijos, kuriomis galima ją užpildyti:
- Įdėkite priekyje.
- Įdėkite viduryje.
- Įdėkite gale.
Susijęs: Kaip sukurti duomenų struktūras naudojant „JavaScript ES6“ klases
Susietas įterpimo metodų sąrašas yra viena iš priežasčių, kodėl kūrėjas gali pasirinkti naudoti šiuos duomenis struktūrą per kitą duomenų struktūrą, pvz., krūvas (tai leidžia įterpti ir ištrinti tik iš viršaus).
Įterpimo į priekį metodas
Įterpimas priekyje, kaip rodo pavadinimas, įterpia naujus duomenis (arba naujus mazgus) susieto sąrašo priekyje.
Įterpkite priekinio metodo pavyzdį
Žemiau pateikiamas pavyzdys, kaip įterpti naujus duomenis sąrašo priekyje.
// įterpti mazgą priekyje
public void insertAtFront (int raktas) {
// sukurti naują mazgą naudojant mazgų klasę
Mazgo temp = naujas mazgas ();
// patikrinkite, ar Temp mazgas buvo sėkmingai sukurtas
// priskirti jam vartotojo pateiktus duomenis
if (Temp! = null) {
Temp.setData (raktas);
Temp.setNextNode (null);
// patikrinkite, ar susieto sąrašo galvutė tuščia
// priskirkite ką tik sukurtą mazgą galvos padėčiai
if (Head == null) {
Galva = temperatūra;
}
// jei mazgas jau yra galvos padėtyje
// pridėti prie jo naują mazgą ir nustatyti jį kaip galvą
Kitas {
Temp.setNextNode (Head);
Galva = temperatūra;
}
}
}
The insertAtFront metodas aukščiau pateiktame pavyzdyje leidžia vartotojui pridėti naujų mazgų į nurodytą susietą sąrašą.
Įdėklo pritaikymas priekyje
Žemiau yra pavyzdys, kaip uždėti įdėklą priekyje.
viešosios klasės vairuotojas {
// vykdo programą
public static void main (String [] args) {
// sukurkite naują susietą sąrašą, pavadintą Sąrašas
LinkedList List = naujas LinkedList ();
// kiekvieną vertę pridėkite prie susieto sąrašo priekio kaip naują mazgą
List.insertAtFront (10);
List.insertAtFront (8);
List.insertAtFront (6);
List.insertAtFront (4);
List.insertAtFront (2);
}
}
The Vairuotojas klasė (šis pavadinimas dažnai priskiriamas vykdomajai klasei „Java“), naudoja „LinkedList“ klasę, kad sudarytų susietą penkių lyginių skaičių sąrašą. Žvelgiant į aukščiau esantį kodą, turėtų būti lengva suprasti, kad skaičius „2“ yra susieto sąrašo pagrindinėje pozicijoje. Bet kaip tai patvirtinti?
„Rodyti visus mazgus“ metodo naudojimas
Visų mazgų rodymo metodas yra esminis susietų sąrašų metodas. Be jo kūrėjas negalės matyti susietame sąraše esančių mazgų. Jis keliauja per susietą sąrašą (pradedant nuo galvos), spausdindamas duomenis, saugomus kiekviename sąrašą sudarančiame mazge.
Rodyti visus mazgus metodo pavyzdys
Žemiau pateikiamas visų užrašų rodymo metodo naudojimo „Java“ pavyzdys.
// rodyti visų mazgų metodą
public void displayAllNodes () {
// sukurkite naują mazgo skambutį Temp ir priskirkite jį susieto sąrašo galvai
// jei galva turi nulinę reikšmę, susietas sąrašas tuščias
Mazgo temp = galva;
if (Head == null) {
System.out.println ("Sąrašas tuščias.");
grįžti;
}
System.out.println („Sąrašas:“);
while (Temp! = null) {
// spausdinti kiekvieno mazgo duomenis į konsolę (pradedant nuo galvos)
System.out.print (Temp.getData () + "");
Temp = Temp.getNextNode ();
}
}
Dabar, kai displayAllNodes metodas buvo pridėtas prie „LinkedList“ klasę, galite peržiūrėti susietą sąrašą, prie vairuotojų klasės pridėdami vieną kodo eilutę.
Rodyti visus mazgus metodo pavyzdys
Žemiau pamatysite, kaip naudosite visų mazgų rodymo metodą.
// spausdinti susietame sąraše esančius mazgus
List.displayAllNodes ();
Vykdant aukščiau esančią kodo eilutę, konsolėje bus pateikta tokia išvestis:
Sąrašas:
2 4 6 8 10
Rasti mazgo metodą
Bus atvejų, kai vartotojas norės rasti konkretų mazgą susietame sąraše.
Pavyzdžiui, nebūtų praktiška, jei bankas, turintis milijonus klientų, išspausdintų visų klientų duomenų bazę, kai jiems reikia matyti tik konkretaus kliento duomenis.
Todėl, užuot naudoję displayAllNodes metodas, efektyvesnis būdas yra rasti vieną mazgą, kuriame yra reikalingi duomenys. Štai kodėl vieno mazgo metodo paieška yra svarbi susieto sąrašo duomenų struktūroje.
Rasti mazgo metodo pavyzdys
Žemiau pateikiamas radimo mazgo metodo naudojimo pavyzdys.
// ieškokite vieno mazgo naudodami raktą
public boolean findNode (int raktas) {
// sukurkite naują mazgą ir padėkite jį susieto sąrašo pradžioje
Mazgo temp = galva;
// kol dabartinis mazgas nėra tuščias
// patikrinkite, ar jo duomenys atitinka vartotojo pateiktą raktą
while (Temp! = null) {
if (Temp.getData () == raktas) {
System.out.println ("Mazgas yra sąraše");
grįžti tiesa;
}
// pereiti prie kito mazgo
Temp = Temp.getNextNode ();
}
// jei raktas nerastas susietame sąraše
System.out.println ("Mazgas nėra sąraše");
grąžinti klaidingą;
}
Su displayAllNodes metodą, jūs patvirtinote, kad „LinkedList“ yra 5 lyginiai skaičiai nuo 2 iki 10. The findNode aukščiau pateiktas pavyzdys gali patvirtinti, ar vienas iš lyginių skaičių yra skaičius 4, paprasčiausiai paskambinus vairuotojuje esančiam metodui ir nurodant skaičių kaip parametrą.
Rasti mazgo metodo pavyzdys
Žemiau pateikiamas pavyzdys, kaip praktikoje galėtumėte naudoti paieškos mazgo metodą.
// patikrinkite, ar mazgas yra susietame sąraše
List.findNode (4);
Aukščiau pateiktas kodas konsolėje duos tokią išvestį:
Mazgas yra sąraše
Naudojant metodą „Ištrinti mazgą“
Naudodamas tą patį banko pavyzdį iš viršaus, banko duomenų bazėje esantis klientas gali norėti uždaryti savo sąskaitą. Čia bus naudingas ištrinti mazgo metodas. Tai sudėtingiausias susietų sąrašų metodas.
Metodas „Ištrinti mazgą“ ieško tam tikro mazgo, ištrina tą mazgą ir susieja ankstesnį mazgą su tuo, kuris seka po ištrinto mazgo.
Mazgo metodo ištrynimo pavyzdys
Žemiau pateikiamas mazgo ištrynimo metodo pavyzdys.
public void findAndDelete (int raktas) {
Mazgo temp = galva;
Mazgas prev = null;
// patikrinkite, ar pagrindiniame mazge yra duomenų
// ir ištrinkite
if (Temp! = null && Temp.getData () == raktas) {
Galva = Temp.getNextNode ();
grįžti;
}
// ieškokite kituose sąrašo mazguose
// ir ištrinkite
while (Temp! = null) {
if (Temp.getNextNode (). getData () == raktas) {
prev = Temp.getNextNode (). getNextNode ();
Temp.setNextNode (ankstesnis);
grįžti;
}
Temp = Temp.getNextNode ();
}
}
Panaikinkite mazgo ištrynimo metodo pavyzdį
Žemiau pateikiamas pavyzdys, kaip praktiškai naudoti ištrinti mazgo metodą.
// ištrinti mazgą, kuriame yra duomenys 4
List.findAndDelete (4);
// spausdinti visus susieto sąrašo mazgus
List.displayAllNodes ();
Naudojant dvi aukščiau esančias kodo eilutes ankstesnėje „Driver“ klasėje, konsolėje bus pateikta tokia išvestis:
Sąrašas:
2 6 8 10
Jei baigėte šio vadovėlio straipsnio pabaigą, sužinosite:
- Kaip sukurti mazgų klasę.
- Kaip sukurti susieto sąrašo klasę.
- Kaip užpildyti susietą sąrašo klasę naudojant iš anksto nustatytus metodus.
- Kaip sukurti vairuotojų klasę ir naudoti skirtingus susietų sąrašų metodus norimam rezultatui pasiekti.
Susietas sąrašas yra tik viena iš daugelio duomenų struktūrų, kurias galite naudoti duomenims saugoti, gauti ir ištrinti. Kadangi turite viską, ko reikia norint pradėti, kodėl gi nepabandžius šių pavyzdžių „Java“?
Mokotės „Java“? Leiskite masyvams lengvai tvarkyti jūsų duomenis.
Skaityti toliau
- Programavimas
- „Java“
- Programavimas
- Kodavimo patarimai
Kadeisha Kean yra „Full Stack“ programinės įrangos kūrėja ir techninė/technologijų rašytoja. Ji turi aiškų sugebėjimą supaprastinti kai kurias sudėtingiausias technologines sąvokas; gaminti medžiagą, kurią lengvai supranta bet kuris naujokas. Ji aistringai rašo, kuria įdomią programinę įrangą ir keliauja po pasaulį (per dokumentinius filmus).
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!
Norėdami užsiprenumeruoti, spustelėkite čia