Atvirkštinis susietas sąrašas (C++)

Atvirkstinis Susietas Sarasas C



Šiame „LinuxHint“ vadove parodyta, kaip pakeisti susietą sąrašą C++. Kai apverčiate susietą sąrašą, nuorodos kelias pakeičiamas ir galva tampa uodega, o uodega tampa galvute. Sukeisdami mazgų pozicijas, galime tai greitai suprasti. Šiame keitime mes tiesiog keičiame mazgų padėtis iš kairės į dešinę arba atvirkščiai.

susietas sąrašas: Tai yra susietas sąrašas, kurį norime pakeisti.







Po atvirkštinio susieto sąrašo: Žemiau pateiktas rezultatas bus apverstas aukščiau pateiktu sąrašu.





Aukščiau pateiktoje diagramos pavyzdyje matome, kad pagrindinio mazgo ir uodegos mazgas keičia savo pozicijas, kai apverčiame susietą sąrašą. Pagrindinis mazgas, kuris dabar yra uodegos mazgas, nurodo nulinį mazgą, nes dabar jis yra uodegos mazgas.





Algoritmo žingsniai

  1. Sukuriame pagrindinį metodą ir deklaruojame kai kuriuos būtinus kintamuosius.
  2. Tada kitas žingsnis yra sukurti metodą, kuris gali sukurti susietą sąrašą. Šis metodas padeda mums sukurti susietą sąrašą.
  3. Kitas veiksmas yra sukurti metodą, kaip pakeisti susietą sąrašą. Šiuo metodu perduodame visą susietą sąrašą, o šis metodas pakeis susietą sąrašą.
  4. Dabar mums reikia kito metodo, kad būtų rodomas rezultatas po to, kai jį apverčiame.
  5. Visus minėtus metodus sujungsime į pagrindinį metodą.

Mes paaiškinsime atvirkštinį susietą sąrašą naudodami vaizdinę formą, kad būtų lengviau suprasti. Taigi pradėkime nuo pavyzdžio.

Toliau pateikiamas susietas sąrašas, kurį norime pakeisti.



1 žingsnis . Žalios spalvos mazgas yra pagrindinis mazgas, nukreipiantis į pirmąjį paleisties mazgą.

2 žingsnis. Kitame žingsnyje mes eisime per visą susietą sąrašą, kol negausime nulinės rodyklės šalia antraštės mazgo. Tam kitam mazgui skirsime laikiną pavadinimą, kaip parodyta toliau pateiktoje diagramoje.

3 veiksmas. Kadangi turime naują atskaitos mazgą pavadinimu „laikinas“, kuris gali padėti pereiti visą susietą sąrašą, kol negausime nulio rodyklės, todėl kitą antraštės mazgo nuorodą galime nustatyti kaip nulį, o tai neturės įtakos susietam sąrašą, kaip parodyta toliau pateiktoje diagramoje. Nulinė rodyklė šalia dabartinio mazgo vadinama ankstesniu mazgu.

4 veiksmas. Dabar laikinąjį mazgą perkeliame į kitą mazgą, o dabartinį – į ankstesnį laikinąjį mazgą. Taigi dabar mes persikėlėme į kitą mazgą. Taip pat pakeičiame ankstesnį mazgą iš nulinio į tik ankstesnį dabartinio mazgo mazgą. Taigi dabar laikinas mazgas pasirūpins visais perėjimais iki nulinio rodyklės, kad galėtume nustatyti dabartinio mazgo nuorodą į ankstesnį mazgą, o dabar jis nukreipia į ankstesnį mazgą, kaip parodyta toliau pateiktoje diagramoje.

Taigi atliekame tuos pačius veiksmus ir pagaliau gausime atvirkštinį susietų sąrašą.

5 veiksmas .

6 veiksmas.

7 veiksmas.

8 veiksmas.

9 veiksmas.

10 veiksmas.

11 veiksmas.

12 veiksmas.

13 veiksmas.

14 veiksmas. Šiame žingsnyje mūsų susietas sąrašas pasikeitė.

C++ programa, skirta pakeisti susietą sąrašą

#include
naudojant vardų erdvė std ;

// Mazgo kūrimo būdas
struktūra mazgas {
tarpt vertė ;
mazgas * nextNodePtr ;
} * mazgasObject ;

tuštuma sukurtiLinkedList ( tarpt n ) ;
tuštuma reverseLinkedList ( mazgas ** mazgasObject ) ;
tuštuma ekranas ( ) ;

tarpt pagrindinis ( ) {
tarpt n,vertė,elementas ;
cout << 'Kiek mazgų norite sukurti =>:' ;
valgymas >> n ;
sukurtiLinkedList ( n ) ;
cout << \n Informacija susietame sąraše: \n ;
ekranas ( ) ;
cout << \n Susietas sąrašas po apvertimo \n ;
reverseLinkedList ( & mazgasObject ) ;
ekranas ( ) ;
grąžinti 0 ;
}
// Šis metodas sukurs susietą sąrašą
tuštuma sukurtiLinkedList ( tarpt n ) {
struktūra mazgas * frontNode, * tempNode ;
tarpt vertė, t ;

mazgasObject = ( struktūra mazgas * ) malloc ( dydis ( struktūra mazgas ) ) ;
jeigu ( mazgasObject == NULL )
cout << „Neužtenka atminčiai įgyti“ ;
Kitas {
cout << 'Įveskite 1 mazgo informaciją (tik numerį): ' ;
valgymas >> vertė ;
mazgasObject - > vertė = vertė ;
mazgasObject - > nextNodePtr = NULL ;
tempNode = mazgasObject ;

dėl ( i = du ; i <= n ; i ++ ) {
priekinis mazgas = ( struktūra mazgas * ) malloc ( dydis ( struktūra mazgas ) ) ;

// Kai susietame sąraše nėra mazgo
jeigu ( priekinis mazgas == NULL ) {
cout << 'Neįmanoma paskirstyti atminties' ;
pertrauka ;
}
Kitas {
cout << 'Įveskite mazgo informaciją' << i << ':' ;
valgymas >> vertė ;
priekinis mazgas - > vertė = vertė ;
priekinis mazgas - > nextNodePtr = NULL ;
tempNode - > nextNodePtr = priekinis mazgas ;
tempNode = tempNode - > nextNodePtr ;
}
}
}
}

tuštuma reverseLinkedList ( mazgas ** mazgasObject ) {
struktūra mazgas * tempNode = NULL ;
struktūra mazgas * ankstesnisMazgas = NULL ;
struktūra mazgas * currentNode = ( * mazgasObject ) ;
kol ( currentNode ! = NULL ) {
tempNode = currentNode - > nextNodePtr ;
currentNode - > nextNodePtr = ankstesnisMazgas ;
ankstesnisMazgas = currentNode ;
currentNode = tempNode ;
}
( * mazgasObject ) = ankstesnisMazgas ;
}
tuštuma ekranas ( ) {
struktūra mazgas * tempNode ;
jeigu ( mazgasObject == NULL ) {
cout << 'Susietų sąrašas tuščias' ;
}
Kitas {
tempNode = mazgasObject ;
kol ( tempNode ! = NULL )
{
cout << tempNode - > vertė << \t ;
tempNode = tempNode - > nextNodePtr ;
}
}
cout << endl ;
}

Išvestis

Kiek mazgų norite sukurti =>: 6
Įveskite 1 mazgo informaciją (tik numerį): 101
Įveskite 2 mazgo informaciją: 95
Įveskite 3 mazgo informaciją: 61
Įveskite 4 mazgo informaciją: 19
Įveskite 5 mazgo informaciją: 12
Įveskite 6 mazgo informaciją: 11

Informacija susietame sąraše:
101 95 61 19 12 11

Susietas sąrašas po apvertimo
11 12 19 61 95 101

Išvada

Šiame „LinuxHint“ straipsnyje apžvelgta, kaip pakeisti susietą sąrašą C++. Yra keletas kitų susieto sąrašo atšaukimo būdų, tačiau tai labai dažnas susieto sąrašo atšaukimo būdas. Jūs turite nuspręsti, kaip norite išspręsti savo problemas, tačiau paprastai atvirkštinio susieto sąrašo funkcija turėtų būti paprasta kilpa su rodyklėmis.