java stack tutorial stack class implementation with examples
Овај водич објашњава шта је Стацк у Јави, Јава Стацк Цласс, Стацк АПИ методе, Имплементација стека помоћу низа и повезане листе уз помоћ примера:
Стек је уређена структура података која припада оквиру Јава Цоллецтион Фрамеворк. У овој колекцији елементи се додају и уклањају само са једног краја. Крај на којем се додају и уклањају елементи називају се „Топ оф тхе Стацк“.
Како се додавање и брисање врши само на једном крају, први елемент додан у стек је последњи уклоњени елемент из стека. Стога се стек назива ЛИФО (Ласт-ин, Фирст-оут) структура података.
=> Овде погледајте водич за почетнике Јава
Шта ћете научити:
- Јава Стацк Цоллецтион
- Закључак
Јава Стацк Цоллецтион
Сликовни приказ стека дат је у наставку.
Као што је приказано у горњој секвенци представљања, у почетку је стек празан, а врх стека је постављен на -1. Тада започињемо операцију „пусх“ која се користи за додавање елемента у стек.
Дакле, у другом представљању гурамо елемент 10. У овом тренутку се врх увећава. Поново гурнемо елемент 20 у гомилу чиме додатно повећавамо врх.
У последњем представљању започињемо операцију „поп“. Ова операција се користи за уклањање елемента из стека. Поп елементом се уклања елемент који је тренутно усмерен на „Топ“.
Структура података стека подржава следеће операције:
- Притисни: Додаје елемент у стек. Као резултат, вредност врха се увећава.
- Поп: Елемент се уклања из стека. Након поп операције, вредност врха се смањује.
- Завири: Ова операција се користи за тражење или тражење елемента. Вредност врха се не мења.
Врх стека који се користи као крај за додавање / уклањање елемената из стека такође може имати различите вредности у одређеном тренутку. Ако је величина стека Н, тада ће врх стека имати следеће вредности под различитим условима, у зависности од тога у каквом је стању стек.
Статус стека | Врхунска вредност |
---|---|
Стацк Емпти | -1 |
Један елемент у гомили | 0 |
Стацк фулл | Н-1 |
Прелив (елементи> Н) | Н. |
Класа стека у Јави
Јава Цоллецтион Фрамеворк нуди класу под називом „Стацк“. Ова класа Стацк проширује класу Вецтор и примењује функционалност структуре података Стацк.
Дијаграм испод приказује хијерархију класе Стацк.
Као што је приказано на горњем дијаграму, класа Стацк наслеђује класу Вецтор која заузврат имплементира интерфејс Лист оф Цоллецтион.
Класа Стацк је део пакета јава.утил. Да бисмо у програм укључили класу Стацк, можемо користити наредбу импорт на следећи начин.
import java.util.*;
или
import java.util.Stack;
Направите стек у Јави
Једном када увозимо класу Стацк, можемо створити објект Стацк како је приказано доле:
Stack mystack = new Stack();
Такође можемо створити генерички тип објекта класе Стацк на следећи начин:
најбољи бесплатни Виндовс 10 чистач регистра
Stack myStack = new Stack;
Овде дата_типе може бити било који важећи тип података у Јави.
На пример ,можемо створити следеће објекте класе Стацк.
Stack stack_obj = new Stack(); Stack str_stack = new Stack();
Стацк АПИ методе у Јави
Класа Стацк пружа методе за додавање, уклањање и претраживање података у Стеку. Такође пружа метод за проверу да ли је стек празан. О овим методама ћемо разговарати у наставку.
Стацк пусх операција
Операција потискивања користи се за гурање или додавање елемената у стек. Једном када креирамо инстанцу стека, можемо помоћу операције потискивања додати елементе типа стек објекта у стек.
Следећи комад кода користи се за иницијализацију целобројног стога са вредностима.
Stack myStack = new Stack(); myStack.push(10); myStack.push(15); myStack.push(20);
Почетни стек добијен као резултат горе наведеног дела кода приказан је испод:
Ако извршимо још једну операцију пусх () као што је приказано доле,
push(25);
Резултат ће бити:
Стацк Поп Операција
Елемент можемо уклонити из гомиле помоћу операције „поп“. Елемент који тренутно показује горњи део искаче из стека.
Следећи део кода то постиже.
Stack intStack = new Stack(); intStack.push(100); intStack.push(200); int val = intStack.pop();
Променљива вал ће садржати вредност 200 јер је последњи елемент гурнут у стек.
Приказ стека за пусх и поп операцију је следећи:
Стацк Пеек Оператион
Операција завиривања враћа врх стека без уклањања елемента. У горњем примеру стека, „интСтацк.пеек ()“ ће вратити 200.
Стецк исЕмпти Оператион
Операција исЕмпти () класе Стацк проверава да ли је објект стека празан. Враћа труе ако Стацк нема елементе у себи, иначе враћа фалсе.
Операција претраживања стека
Можемо тражити елемент на стеку помоћу операције сеарцх (). Операција сеарцх () враћа индекс елемента који се тражи. Овај индекс се рачуна од врха стека.
Stack intStack = new Stack (); intStack.push (100); intStack.push (200); int index = inStack.search(100); //index will have the value 2.
Величина гомиле
Величина објекта Стацк дата је јава.утил.Стацк.сизе () метода. Враћа укупан број елемената у стеку.
Следећи пример штампа величину стека.
Stack myStack = new Stack(); myStack.push(100); myStack.push(200); myStack.push(300); System.out.println('Stack size:' + myStack.size()); //Stack size: 3
Штампање / понављање елемената слога
Можемо прогласити итератор за Стацк, а затим прелазити кроз целу Стацк користећи овај итератор. На овај начин можемо посетити и одштампати сваки елемент стека један по један.
Следећи програм показује начин за итерацију Стацка помоћу итератора.
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); System.out.println('Stack elements:'); //get an iterator for the stack Iterator iterator = stack.iterator(); //traverse the stack using iterator in a loop and print each element while(iterator.hasNext()){ System.out.print(iterator.next() + ' '); } } }
Излаз:
Елементи стека:
ПУНЕ МУМБАИ НАШИК
Стек користећи Јаву 8
Такође можемо штампати или прелазити елементе стека користећи функције Јава 8 као што су Стреам АПИ-ји, форЕацх и форЕацхРемаининг конструкције.
Следећи програм приказује употребу Јава 8 конструкција за прелазак кроз стек.
import java.util.*; import java.util.stream.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); System.out.println('Stack elements using Java 8 forEach:'); //get a stream for the stack Stream stream = stack.stream(); //traverse though each stream object using forEach construct of Java 8 stream.forEach((element) -> { System.out.print(element + ' '); // print element }); System.out.println('
Stack elements using Java 8 forEachRemaining:'); //define an iterator for the stack Iterator stackIterator = stack.iterator(); //use forEachRemaining construct to print each stack element stackIterator.forEachRemaining(val -> { System.out.print(val + ' '); }); } }
Излаз:
Стацк елементе користећи Јава 8 форЕацх:
ПУНЕ МУМБАИ НАШИК
Стацк елементе користећи Јава 8 форЕацхРемаининг:
ПУНЕ МУМБАИ НАШИК
Имплементација стека у Јави
Следећи програм имплементира детаљни стек који приказује различите операције стека.
import java.util.Stack; public class Main { public static void main(String a()){ //declare a stack object Stack stack = new Stack(); //print initial stack System.out.println('Initial stack : ' + stack); //isEmpty () System.out.println('Is stack Empty? : ' + stack.isEmpty()); //push () operation stack.push(10); stack.push(20); stack.push(30); stack.push(40); //print non-empty stack System.out.println('Stack after push operation: ' + stack); //pop () operation System.out.println('Element popped out:' + stack.pop()); System.out.println('Stack after Pop Operation : ' + stack); //search () operation System.out.println('Element 10 found at position: ' + stack.search(10)); System.out.println('Is Stack empty? : ' + stack.isEmpty()); } }
Излаз:
Почетни стек: ()
Је ли стек празан? : истинито
Слагање након гурања: (10, 20, 30, 40)
Елемент је искочио: 40
Низ након поп операције: (10, 20, 30)
Елемент 10 пронађен на положају: 3
Да ли је Стацк празан? : фалсе
ц ++ генерише случајни број између 0 и 1
Стацк То Арраи Ин Јава
Структура података стека може се претворити у низ помоћу методе ‘тоАрраи ()’ класе Стацк.
Следећи програм демонстрира ову конверзију.
import java.util.*; import java.util.stream.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); //print the stack System.out.println('The Stack contents: ' + stack); // Create the array and use toArray() method to convert stack to array Object() strArray = stack.toArray(); //print the array System.out.println('The Array contents:'); for (int j = 0; j Излаз:
Садржај стека: (ПУНЕ, МУМБАИ, НАСХИК)
Садржај низа:
ПУНЕ МУМБАИ НАШИК

Имплементација стека у Јави помоћу низа
Стек се може имплементирати помоћу низа. Све операције слагања изводе се помоћу низа.
Програм у наставку приказује имплементацију стека помоћу низа.
import java.util.*; //Stack class class Stack { int top; //define top of stack int maxsize = 5; //max size of the stack int() stack_arry = new int(maxsize); //define array that will hold stack elements Stack(){ //stack constructor; initially top = -1 top = -1; } boolean isEmpty(){ //isEmpty () method return (top <0); } boolean push (int val){ //push () method if(top == maxsize-1) { System.out.println('Stack Overflow !!'); return false; } else { top++; stack_arry(top)=val; return true; } } boolean pop () { //pop () method if (top == -1) { System.out.println('Stack Underflow !!'); return false; } else { System.out.println('
Item popped: ' + stack_arry(top--)); return true; } } void display () { //print the stack elements System.out.println('Printing stack elements .....'); for(int i = top; i>=0;i--) { System.out.print(stack_arry(i) + ' '); } } } public class Main { public static void main(String() args) { //define a stack object Stack stck = new Stack(); System.out.println('Initial Stack Empty : ' + stck.isEmpty()); //push elements stck.push(10); stck.push(20); stck.push(30); stck.push(40); System.out.println('After Push Operation...'); //print the elements stck.display(); //pop two elements from stack stck.pop(); stck.pop(); System.out.println('After Pop Operation...'); //print the stack again stck.display(); } }
Излаз:
Почетни стек је празан: тачно
Након пусх операције ...
Штампање елемената слога ... ..
40 30 20 10
Предмет је искочио: 40
Предмет је искочио: 30
После поп операције ...
Штампање елемената слога ... ..
20 10
10 најбољих шпијунских апликација за ипхоне

Имплементација стека помоћу повезане листе
Стек се такође може применити помоћу повезане листе, баш као што смо то урадили користећи низове. Једна од предности коришћења повезане листе за примену стека је та што он може динамички да расте или се смањује. Не треба да имамо ограничење максималне величине као у низовима.
Следећи програм имплементира повезану листу за извођење операција стека.
import static java.lang.System.exit; // Stack class using LinkedList class Stack_Linkedlist { // Define Node of LinkedList private class Node { int data; // node data Node nlink; // Node link } // top of the stack Node top; // stack class Constructor Stack_Linkedlist() { this.top = null; } // push () operation public void push(int val) { // create a new node Node temp = new Node(); // checks if the stack is full if (temp == null) { System.out.print('
Stack Overflow'); return; } // assign val to node temp.data = val; // set top of the stack to node link temp.nlink = top; // update top top = temp; } // isEmpty () operation public boolean isEmpty() { return top == null; } // peek () operation public int peek() { // check if the stack is empty if (!isEmpty()) { return top.data; } else { System.out.println('Stack is empty!'); return -1; } } // pop () operation public void pop() { // check if stack is out of elements if (top == null) { System.out.print('
Stack Underflow!!'); return; } // set top to point to next node top = (top).nlink; } //print stack contents public void display() { // check for stack underflow if (top == null) { System.out.printf('
Stack Underflow!!'); exit(1); } else { Node temp = top; System.out.println('Stack elements:'); while (temp != null) { // print node data System.out.print(temp.data + '->'); // assign temp link to temp temp = temp.nlink; } } } } public class Main { public static void main(String() args) { // Create a stack class object Stack_Linkedlist stack_obj = new Stack_Linkedlist(); // push values into the stack stack_obj.push(9); stack_obj.push(7); stack_obj.push(5); stack_obj.push(3); stack_obj.push(1); // print Stack elements stack_obj.display(); // print current stack top System.out.println('
Stack top : ' + stack_obj.peek()); // Pop elements twice System.out.println('Pop two elements'); stack_obj.pop(); stack_obj.pop(); // print Stack elements stack_obj.display(); // print new stack top System.out.println('
New Stack top:' + stack_obj.peek()); } }
Излаз:
Елементи стека:
1-> 3-> 5-> 7-> 9->
Стацк топ: 1
Поп два елемента
Елементи стека:
5-> 7-> 9->
Нови стацк топ: 5

Често постављана питања
П # 1) Шта су стекови у Јави?
Одговор: Стек је ЛИФО (Ласт ин, Фирст оут) структура података за чување елемената. Елементи стека се додају или уклањају из стога са једног краја који се назива Врх стека.
Додавање елемента у стог врши се помоћу операције Пусх. Брисање елемената врши се помоћу поп операције. У Јави се стек имплементира помоћу класе Стацк.
П # 2) Да ли је Стацк колекција на Јави?
Одговор: Да. Стек је стара колекција на Јави која је доступна од АПИ за колекције у Јави 1.0 надаље. Стацк наслеђује класу Вецтор интерфејса Лист.
П # 3) Да ли је Стацк интерфејс?
Одговор: Стез интерфејса је интерфејс који описује структуру последњег улаза, првог изласка и користи се за чување стања рекурзивних проблема.
П # 4) За шта се користе стекови?
Одговор: Следе главне примене стека:
- Процена израза и конверзије: Стацк се користи за претварање израза у постфик, инфик и префик. Такође се користи за вредновање ових израза.
- Стек се такође користи за рашчлањивање синтаксних стабала.
- Стек се користи за проверу заграда у изразу.
- Стек се користи за решавање проблема враћања уназад.
- Позиви функција процењују се помоћу стекова.
П # 5) Које су предности стека?
Одговор: Променљиве сачуване у стеку аутоматски се уништавају када се врате. Стекови су бољи избор када се меморија додељује и ослобађа. Снопови такође чисте меморију. Поред тога, стекови се могу ефикасно користити за процену израза и рашчлањивање израза.
Закључак
Овим је завршен наш водич о стековима у Јави. Класа стека је део АПИ-ја за прикупљање и подржава пусх, поп, пеек и операције претраживања. Елементи се додају или уклањају у / из стека само на једном крају. Овај крај се назива врх стека.
У овом упутству смо видели све методе које подржава класа стека. Такође смо имплементирали стек користећи низове и повезане листе.
Наставићемо са осталим часовима сакупљања у нашим следећим водичима.
=> Прочитајте серију Еаси Јава Траининг
Препоручено читање
- Водич за Јава рефлексију са примерима
- Водич за класу Јава Сцаннер са примерима
- Шта је Јава ХасхТабле - примена и пример ХасхТабле-а
- Шта је Јава Вецтор | Водич за Јава векторске часове са примерима
- Јава Арраи Цласс Туториал - јава.утил.Арраис Цласс са примерима
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти
- ЛинкедХасхМап у Јави - пример и примена ЛинкедХасхМап
- Водич за Јава СВИНГ: Контејнери, компоненте и руковање догађајима