Kas yra „Python“ duomenų kaupimo struktūros?



Šis straipsnis suteiks jums išsamių ir išsamių žinių apie „Python“ duomenų kaupimo struktūras su daugybe pavyzdžių.

Duomenų struktūros yra duomenų reikšmių rinkinys, tarpusavio ryšiai ir funkcijos ar operacijos, kurias galima pritaikyti duomenims. Dabar yra daug duomenų struktūrų. Bet šiandien mūsų dėmesys bus sutelktas į „Stack Data Structures“. Aptarsiu šias temas:

Kodėl duomenų struktūros?

Norėdami atsakyti į tai, turėsite mąstyti dideliu lygiu. Pagalvokite, kaip „Google“ žemėlapiai parodo geriausią maršrutą per kelias sekundes, kaip jis grąžina jūsų paieškos rezultatą mikrosekundėmis. Jis neturi problemų tik su 100 svetainių, jis susijęs su daugiau nei milijardu svetainių ir vis tiek rodo jūsų rezultatą taip greitai.





Na, nors naudojamas algoritmas vaidina lemiamą vaidmenį, duomenų struktūra arba naudojamas konteineris yra to algoritmo pagrindas. Bet kurioje programoje duomenų tvarkymas ir saugojimas tokiu būdu ar struktūra, kuri geriausiai tinka jų naudojimui, yra raktas į veiksmingą prieigą prie duomenų ir jų apdorojimą.

kaip uždaryti programą java

Duomenų struktūrų tipai

Yra keletas standartinių duomenų struktūrų, kurias galima naudoti norint efektyviai dirbti su duomenimis. Mes netgi galime juos pritaikyti arba sukurti visiškai naujus, kad tiktų mūsų programai.



Duomenų struktūros tipai

Kas yra „Stack Data Structure“?

Apsvarstykite keletą realaus gyvenimo pavyzdžių:

  • Siuntimas krovinyje
  • Plokštės ant padėklo
  • Monetų krūva
  • Stalčių krūvelė
  • Traukinių manevravimas geležinkelio kieme

plates-stacks-data-structure



Visi šie pavyzdžiai pateikti a Paskutinis-pirmas-išeina strategija. Apsvarstykite lėkštes ant padėklo. Jei norite pasiimti lėkštę, esate priversti pasirinkti lėkštę iš viršaus, o kai plokštelės buvo laikomos ant padėklo, jos turi būti atvirkštinės. Aukščiau pateikti pavyzdžiai Paskutinis į pirmąjį išėjimas (LIFO) principas yra žinomas kaip Sukrauti .

Be papildomų operacijų, galiu pasakyti, kad pagrindinės operacijos, įmanomos šūsnyje:

  1. Įstumkite arba įdėkite elementą į kamino viršų
  2. Iššaukite arba pašalinkite elementą iš kamino viršaus

„Stack“ duomenų struktūros kūrimas

klasės krūva: def __init __ (self, max_size): self .__ max_size = max_size self .__ elementai = [Nėra] * self .__ max_size self .__ top = -1
  • max_size yra maksimalus elementų skaičius, kurio tikimasi rietuvėje.
  • Šūsnies elementai saugomi pitonų sąraše.
  • Viršuje rodomas aukščiausias kamino indeksas, kuris iš pradžių imamas -1, kad pažymėtų tuščią kaminą.

Pradinę kamino būseną galima pamatyti paveiksle, kur max_size = 5

Įstumkite elementą į kaminą

Dabar, jei norite įvesti ar stumti elementą į kaminą, turite tai atsiminti

  • Viršuje bus rodomas indeksas, į kurį bus įterptas elementas.
  • Tas elementas nebus įterptas, kai kaminas bus pilnas, t. Y. Kai max_size = top.

Taigi koks turėtų būti algoritmas ??

# grąžina maksimalų kamino def dydį get_max_size (self): return self .__ max_size # grąžina „Bool“ reikšmę, nesvarbu, ar kaminas pilnas, ar „True“, jei „full“ ir „False“, kitaip def is_full (self): grąžinkite self.get_max_size () - 1 == self .__ top #pushes elementas kamino viršuje def push (self, data): if (self.is_full ()): print ('stack'as jau pilnas') else: self .__ top = self .__ top + int (1 ) self .__ elementai [self .__ top] = duomenys # Žemiau pateiktą __str __ () galite spausdinti DS objekto elementus derindami def __str __ (self): msg = [] index = self .__ top while (index> = 0): msg.append ((str) (self .__ elements [index])) index- = 1 msg = '' .join (msg) msg ​​= 'Duomenų kaupimas (iš viršaus į apačią):' + msg grąžina pranešimą

Dabar, kai vykdote šiuos veiksmus:

stack1 = kaminas (4)

#Spauskite visus reikiamus elementus.

stack1.push („A“)

stack1.push („B“)

stack1.push („C“)

stack1.push („E“)

spausdinti (stack1.is_full ())

spausdinti (1 kaminas)

Išvestis:

kaminas jau pilnas
Tiesa
Krūvos duomenys (iš viršaus į apačią): D C B A

Pop elementai iš „Stack“

Dabar, kai įdedate elementus į rietuvę, norite juos iškelti, todėl turite pasirūpinti šiais veiksmais:

  • Šūsnis nėra tuščias, ty viršus! = -1
  • Kai ištrinsite duomenis, viršus turi būti nukreiptas į ankstesnį kamino viršų.

Taigi, koks bus algoritmas?

#returns reikšmė, ar kaminas tuščias, ar ne, teisinga, jei tuščia ir klaidinga, kitaip def is_empty (self): return self .__ top == - 1 #returns popped value def pop (self): if (self.is_empty ()): spausdinti („nieko neiššokti, jau tuščia“) dar: a = self .__ elementai [self .__ top] self .__ top = self .__ top-1 grąžina # rodyti visus kamino elementus iš viršaus į apačią def ekranas (self): i diapazone (sava ​​.__ viršuje, -1, -1): spausdinti (savarankiški .__ elementai [i], pabaiga = '') spausdinti ()

Atsižvelgdami į anksčiau sukurtą kaminą, pabandykite išpūsti elementus

spausdinti (stack1.pop ())

spausdinti (stack1.pop ())

spausdinti (1 kaminas)

rubino ant bėgių interneto programa

spausdinti (stack1.pop ())

spausdinti (stack1.pop ())

spausdinti (stack1.pop ())

Išvestis:

D

C

įgyvendinant prioritetinę eilę java

Krūvos duomenys (iš viršaus į apačią): B A

B

Į

nėra ko pūsti, jau tuščia

„Stack Data Structure“ programos

  • 1 pavyzdys:

Šūsnis naudojamas skliaustų derinimo algoritmui aritmetinės išraiškos vertinimui ir metodo iškvietimams įgyvendinti.

Atsakymas į kurį yra 5.

  • 2 pavyzdys:

„Windows“ iškarpinė naudoja du kaminus, kad įvykdytų anuliavimo (perdarymo) (ctrl + z, ctrl + y) operacijas. Jūs būtumėte dirbę su „Windows“ redaktoriais, tokiais kaip „MS-Word“, „Notepad“ ir kt. Čia yra tekstas, parašytas MS-Word. Stebėkite, kaip pasikeitė tekstas spustelėjus „Ctrl-Z“ ir „Ctrl-Y“.

Čia yra kodas, imituojantis anuliuoti-perdaryti operaciją. Peržiūrėkite kodą ir stebėkite, kaip kaminas naudojamas įgyvendinant.

#creating class stack class Stack: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [Nėra] * self .__ max_size self .__ top = -1 def is_full (self): if (self .__ top == self .__ max_size-1): return True return False def is_empty (self): if (self .__ top == - 1): return True return False def push (self, data): if (self.is_full ()): print ('Šūsnis pilnas !!') dar: self .__ top + = 1 self .__ elements [self .__ top] = data def pop (self): if (self.is_empty ()): print ('Steka tuščia! ! ') else: data = self .__ elementai [self .__ top] self .__ top- = 1 grąžina duomenų def ekraną (self): if (self.is_empty ()): print (' Steka tuščia ') else: index = self .__ top while (index> = 0): print (self .__ elements [index]) index- = 1 def get_max_size (self): return self .__ max_size # Galite naudoti žemiau pateiktą __str __ () norėdami atspausdinti DS objektas derinant def __str __ (self): msg = [] index = self .__ top, o (index> = 0): msg.append ((str) (self .__ elements [index])) index- = 1 msg = ' '.join (msg) msg ​​=' Duomenų kaupimas (iš viršaus į apačią): '+ msg grąžina ms g # function to remove arba backspace operation def remove (): globalinė iškarpinė, undo_stack data = mainų sritis [len (mainų sritis) -1] mainų sritis. pašalinti (duomenys) undo_stack.push (duomenys) spausdinti ('Pašalinti:', mainų sritis) #function įgyvendinti atšaukimo operaciją def undo (): visuotinė iškarpinė, undo_stack, redo_stack if (undo_stack.is_empty ()): print ('Nėra anuliuojamų duomenų') else: data = undo_stack.pop () clipboard.append ( data) redo_stack.push (data) print ('Anuliuoti:', mainų sritis) # function to performo operation def redo (): globalinė iškarpinė, undo_stack, redo_stack if (redo_stack.is_empty ()): print ('Nėra duomenų perdaryti ') else: data = redo_stack.pop () if (duomenys nėra iškarpinėje): print (' Nėra duomenų, kuriuos reikia perdaryti ') redo_stack.push (duomenys) else: clipboard.remove (duomenys) undo_stack.push ( duomenys) print ('Perdaryti:', mainų sritis) iškarpinė = ['A', 'B', 'C', 'D', 'E', 'F'] undo_stack = Stack (len (mainų sritis)) redo_stack = Stack [len (mainų sritis)] pašalinti () anuliuoti () perdaryti ()

Išvestis:

Pašalinti: [„A“, „B“, „C“, „D“, „E“]

Anuliuoti: [„A“, „B“, „C“, „D“, „E“, „F“]

Grąžinti: [„A“, „B“, „C“, „D“, „E“]

Tai pasiekėme šios „Stack Data Structure“ „Python“ straipsnyje. Jei patys sėkmingai supratote ir paleidote kodus, „Stacks Data Structure“ nebėra naujokas.

Turite mums klausimą? Prašau paminėti tai šio straipsnio komentarų skiltyje ir kuo greičiau susisieksime su jumis.

Norėdami gauti išsamių žinių apie „Python“ kartu su įvairiomis jo programomis, galite užsiregistruoti tiesiogiai su parą visą parą ir visą gyvenimą.