Шта су структуре података стека у Питхону?



Овај чланак ће вам пружити детаљно и свеобухватно знање о структури података стека у Питхону са пуно примера.

Структуре података су збирка вредности података, односи међу њима и функције или операције које се могу применити на податке. Сада је доступно пуно структура података. Али данас ћемо се фокусирати на структуре података стека. Разговараћу о следећим темама:

Зашто структуре података?

Да бисте одговорили на ово, мораћете да размишљате на великом нивоу. Размислите како вам Гоогле мапе приказују најбољу руту у само делићу секунди, како вам враћа резултат претраге у микросекундама. Не бави се само са 100 веб локација, бави се са више од милијарду сајтова и још увек вам показује резултате тако брзо.





Па, иако употребљени алгоритам игра пресудну улогу, структура података или употребљени контејнер је основа тог алгоритма. У било којој апликацији, организовање и чување података на начин или у структури која је најприкладнија за његову употребу кључно је за ефикасан приступ и обраду података.

Врсте структура података

Постоје неке стандардне структуре података које се могу користити за ефикасан рад са подацима. Можемо их чак прилагодити или направити потпуно нове како би одговарали нашој апликацији.



Типови структуре података

Шта је структура података стека?

Размотрите неке примере из стварног живота:

  • Пошиљка у терету
  • Плоче на послужавнику
  • Стог новчића
  • Гомила фиока
  • Маневрирање возовима у железничком дворишту

plates-stacks-data-structure



Сви ови примери следе а Ласт-Ин-Фирст-Оут стратегија. Размислите о тањирима на послужавнику. Када желите да одаберете тањир, приморани сте да одаберете тањир са врха, док када су плоче држане на тацни, морају бити обрнутим редоследом. Изнад примера који следе Последње-прво-изашло (ЛИФО) принципи су познати као Гомила .

Поред допунских операција, могу рећи да су главне операције које су могуће на стеку:

  1. Гурните или уметните елемент на врх стека
  2. Откачите или уклоните елемент са врха стека

Стварање структуре података стека

класа Стацк: деф __инит __ (селф, мак_сизе): селф .__ мак_сизе = мак_сизе селф .__ елементс = [Ноне] * селф .__ мак_сизе селф .__ топ = -1
  • мак_сизе је максималан број елемената који се очекује у стеку.
  • Елементи стека чувају се на питхон листи.
  • Врх означава највиши индекс стека који је у почетку узет -1 да означи празан стек.

Почетни статус стека може се видети на слици где је мак_сизе = 5

Гурните елемент у стек

Сада, ако желите да унесете или потиснете елемент у стек, морате то да запамтите

  • Врх ће усмерити индекс на који ће елемент бити уметнут.
  • И да ниједан елемент неће бити уметнут када је стек пун, тј. Када је мак_сизе = топ.

Па који би требао бити алгоритам ??

# враћа максималну величину стека деф гет_мак_сизе (селф): ретурн селф .__ мак_сизе # враћа вредност боол-а без обзира да ли је стек пун или не, Труе ако је пун и Фалсе иначе деф ис_фулл (селф): ретурн селф.гет_мак_сизе () - 1 == селф .__ топ #пусхес елемент на врху стека деф пусх (селф, дата): иф (селф.ис_фулл ()): принт ('стек је већ пун') елсе: селф .__ топ = селф .__ топ + инт (1 ) селф .__ елементи [селф .__ топ] = подаци # Доле наведени __стр __ () можете користити за испис елемената ДС објекта током отклањања грешака деф __стр __ (селф): мсг = [] индек = селф .__ топ вхиле (индек> = 0): мсг.аппенд ((стр) (селф .__ елементс [индек])) индек- = 1 мсг = '' .јоин (мсг) мсг = 'Стацк дата (Топ то Боттом):' + мсг ретурн мсг

Сада, када извршите следеће:

преоптерећење у односу на замену ц ++

стацк1 = Стацк (4)

# Притисните све потребне елементе.

стацк1.пусх („А“)

стацк1.пусх („Б“)

стацк1.пусх („Ц“)

стацк1.пусх („Е“)

испис (стацк1.ис_фулл ())

принт (стацк1)

Излаз:

стек је већ пун
Истина
Подаци стека (од врха до дна): Д Ц Б А

Поп елементи из стека

Сада, пошто сте уметнули елементе у стек, желите их искочити, тако да морате водити рачуна о следећем:

  • Стек није празан, тј. Врх! = -1
  • Када избришете податке, врх мора усмерити на претходни врх стека.

Па, који ће бити алгоритам ??

#враћа вредност боол-а да ли је стек празан или не, тачно ако је празно и нетачно у супротном деф ис_емпти (селф): ретурн селф .__ топ == - 1 #враћа искачену вредност деф поп (селф): иф (селф.ис_емпти ()): принт ('ништа за искакање, већ празно') елсе: а = селф .__ елементс [селф .__ топ] селф .__ топ = селф .__ топ-1 ретурн а #дисплаи алл тхе стацк елементс фром топ то боттом деф дисплаи (селф): за и у опсегу (селф .__ топ, -1, -1): принт (селф .__ елементс [и], енд = '') принт ()

Сада, с обзиром на претходно створени стек, покушајте да поп-елементе

испис (стацк1.поп ())

испис (стацк1.поп ())

принт (стацк1)

испис (стацк1.поп ())

испис (стацк1.поп ())

испис (стацк1.поп ())

час појо у јави са примером

Излаз:

Д.

Ц.

Подаци стека (од врха до дна): Б А

Б.

ДО

типови трансформације у информатици

ништа за пуцање, већ празно

Примене структуре података стека

  • Пример 1:

Стек се користи за примену алгоритма за подударање заграда за процену аритметичког израза, а такође и за имплементацију позива метода.

Одговор на који је 5.

  • Пример 2:

Међуспремник у оперативном систему Виндовс користи два стека за спровођење операција поништавања понављања (цтрл + з, цтрл + и). Радили бисте на Виндовс уређивачима речи као што су МС-Ворд, Нотепад итд. Ево текста написаног у МС-Ворд-у. Уочите како се текст променио кликом на Цтрл-З и Цтрл-И.

Ево кода који симулира операцију поништавања понављања. Прођите кроз код и посматрајте како се стек користи у овој имплементацији.

#креирање класе стека класа Стацк: деф __инит __ (селф, мак_сизе): селф .__ мак_сизе = мак_сизе селф .__ елементс = [Ноне] * селф .__ мак_сизе селф .__ топ = -1 деф ис_фулл (селф): иф (селф .__ топ == селф .__ мак_сизе-1): ретурн Труе ретурн Фалсе деф ис_емпти (селф): иф (селф .__ топ == - 1): ретурн Труе ретурн Фалсе деф пусх (селф, дата): иф (селф.ис_фулл ()): принт ('Стек је пун !!') елсе: селф .__ топ + = 1 селф .__ елементс [селф .__ топ] = дата деф поп (селф): иф (селф.ис_емпти ()): принт ('Стек је празан! ! ') елсе: дата = селф .__ елементс [селф .__ топ] селф .__ топ- = 1 ретурн дата деф дисплаи (селф): иф (селф.ис_емпти ()): принт (' Стацк ис емпти ') елсе: индек = селф .__ топ вхиле (индек> = 0): принт (селф .__ елементс [индек]) индек- = 1 деф гет_мак_сизе (селф): ретурн селф .__ мак_сизе # Можете да употребите доњи __стр __ () за испис елемената ДС објекат током отклањања грешака деф __стр __ (селф): мсг = [] индек = селф .__ топ вхиле (индек> = 0): мсг.аппенд ((стр) (селф .__ елементс [индек])) индек- = 1 мсг = ' '.јоин (мсг) мсг =' Подаци стека (од врха до дна): '+ мсг ретурн мс г #функција за примену операције уклањања или враћања простора деф ремове (): глобална међуспремница, ундо_стацк дата = међуспремник [лен (цлипбоард) -1] цлипбоард.ремове (дата) ундо_стацк.пусх (дата) принт ('Ремове:', цлипбоард) #функција за спровођење операције поништавања деф ундо (): глобална међуспремница, ундо_стацк, редо_стацк иф (ундо_стацк.ис_емпти ()): принт ('Нема података за поништавање') елсе: дата = ундо_стацк.поп () цлипбоард.аппенд ( подаци) редо_стацк.пусх (подаци) принт ('Поништи:', међуспремник) #функција за имплементацију редоследа деф редо (): глобална међуспремница, ундо_стацк, редо_стацк иф (редо_стацк.ис_емпти ()): принт ('Нема података поновити ') елсе: дата = редо_стацк.поп () иф (подаци нису у међуспремнику): принт (' Нема података за поновну обраду ') редо_стацк.пусх (подаци) елсе: цлипбоард.ремове (дата) ундо_стацк.пусх ( подаци) принт ('Понови:', међуспремник) цлипбоард = ['А', 'Б', 'Ц', 'Д', 'Е', 'Ф'] ундо_стацк = Стацк (лен (цлипбоард)) редо_стацк = Стацк (лен (цлипбоард)) ремове () поништи () редо ()

Излаз:

Уклони: [„А“, „Б“, „Ц“, „Д“, „Е“]

Опозови: [„А“, „Б“, „Ц“, „Д“, „Е“, „Ф“]

Понови: [„А“, „Б“, „Ц“, „Д“, „Е“]

Овим смо дошли до краја ове структуре података стека у чланку Питхон. Ако сте успешно разумели и покренули кодове, више нисте новајлија у структури података стекова.

Имате питање за нас? Молимо вас да га помињете у одељку за коментаре овог чланка и јавићемо вам се што је пре могуће.

Да бисте стекли детаљно знање о Питхону, заједно са разним апликацијама, можете се пријавити за уживо са 24/7 подршком и доживотним приступом.