logo

Java стек

The стек е линейна структура от данни, която се използва за съхраняване на колекция от обекти. Базира се на Последен влязъл първи излязъл (LIFO). Java колекция framework предоставя много интерфейси и класове за съхраняване на колекция от обекти. Един от тях е Клас стек който предоставя различни операции като натискане, изскачане, търсене и др.

В този раздел ще обсъдим Клас Java Stack , неговото методи, и изпълнявам стековата структура на данните в a Java програма . Но преди да преминете към класа Java Stack, вижте бързо как работи стекът.

Структурата на данните на стека има двете най-важни операции, които са тласък и поп . Операцията push вмъква елемент в стека, а операцията pop премахва елемент от върха на стека. Нека да видим как работят върху стека.

Java стек

Нека бутнем съответно 20, 13, 89, 90, 11, 45, 18 в стека.

Java стек

Нека премахнем (извадим) 18, 45 и 11 от стека.

Java стек

Празен стек: Ако стекът няма елемент, се нарича an празен стек . Когато стекът е празен, стойността на горната променлива е -1.

Java стек

Когато избутаме елемент в стека, горната част е увеличен с 1 . На следващата фигура

  • Натиснете 12, отгоре=0
  • Натиснете 6, отгоре=1
  • Натиснете 9, отгоре=2
Java стек

Когато извадим елемент от стека, стойността на top е намаля с 1 . На следващата фигура сме извадили 9.

Java стек

Следната таблица показва различните стойности на върха.

Java стек

Java стеков клас

В Java, Стек е клас, който попада под рамката на колекцията, която разширява вектор клас. Той също така реализира интерфейси Списък, колекция, повторение, клониране, сериализиране. Той представлява LIFO стека от обекти. Преди да използваме класа Stack, трябва да импортирамеjava.utilпакет. Класът стек, подреден в йерархията на рамката на колекциите, както е показано по-долу.

Java стек

Конструктор на клас стек

Класът Stack съдържа само конструктор по подразбиране което създава празен стек.

дискета
 public Stack() 

Създаване на стек

Ако искаме да създадем стек, първо импортирайтеjava.utilпакетирайте и създайте обект от класа Stack.

 Stack stk = new Stack(); 

Или

 Stack stk = new Stack(); 

Където типът обозначава типа стек като цяло число, низ и т.н.

Методи на класа стек

Можем да извършваме операция за избутване, изскачане, надникване и търсене в стека. Класът Java Stack осигурява основно пет метода за извършване на тези операции. Наред с това, той предоставя и всички методи на Клас Java Vector .

Метод Модификатор и тип Описание на метода
празен() булево Методът проверява дали стекът е празен или не.
натиснете (E елемент) И Методът избутва (вмъква) елемент в горната част на стека.
поп () И Методът премахва елемент от върха на стека и връща същия елемент като стойността на тази функция.
надниквам() И Методът разглежда горния елемент на стека, без да го премахва.
търсене (обект o) вътр Методът търси посочения обект и връща позицията на обекта.

Клас на стека празен() метод

The празен() метод на класа Stack проверява дали стекът е празен или не. Ако стекът е празен, той връща true, в противен случай връща false. Можем също да използваме метода isEmpty() на класа Vector.

Синтаксис

 public boolean empty() 

Се завръща: Методът връща true, ако стекът е празен, в противен случай връща false.

chr функция python

В следващия пример създадохме екземпляр на класа Stack. След това извикахме метода empty() два пъти. Първият път се връща вярно защото не сме избутали нито един елемент в стека. След това сме избутали елементи в стека. Отново извикахме метода empty(), който връща невярно тъй като стекът не е празен.

StackEmptyMethodExample.java

 import java.util.Stack; public class StackEmptyMethodExample { public static void main(String[] args) { //creating an instance of Stack class Stack stk= new Stack(); // checking stack is empty or not boolean result = stk.empty(); System.out.println('Is the stack empty? ' + result); // pushing elements into stack stk.push(78); stk.push(113); stk.push(90); stk.push(120); //prints elements of the stack System.out.println('Elements in Stack: ' + stk); result = stk.empty(); System.out.println('Is the stack empty? ' + result); } } 

Изход:

 Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false 

Стеков клас push() Метод

Методът вмъква елемент в горната част на стека. Работи по същия начин като метода addElement(item) на класа Vector. Той предава параметър вещ да бъдат избутани в стека.

Синтаксис

 public E push(E item) 

Параметър: Елемент, който трябва да бъде бутнат в горната част на стека.

Се завръща: Методът връща аргумента, който сме предали като параметър.

Клас на стека pop() Метод

Методът премахва обект в горната част на стека и връща същия обект. Хвърля се EmptyStackException ако стекът е празен.

Синтаксис

 public E pop() 

Се завръща: Връща обект, който е в горната част на стека.

Нека внедрим стека в програма на Java и да изпълним операции за натискане и изскачане.

StackPushPopExample.java

 import java.util.*; public class StackPushPopExample { public static void main(String args[]) { //creating an object of Stack class Stack stk = new Stack(); System.out.println('stack: ' + stk); //pushing elements into the stack pushelmnt(stk, 20); pushelmnt(stk, 13); pushelmnt(stk, 89); pushelmnt(stk, 90); pushelmnt(stk, 11); pushelmnt(stk, 45); pushelmnt(stk, 18); //popping elements from the stack popelmnt(stk); popelmnt(stk); //throws exception if the stack is empty try { popelmnt(stk); } catch (EmptyStackException e) { System.out.println('empty stack'); } } //performing push operation static void pushelmnt(Stack stk, int x) { //invoking push() method stk.push(new Integer(x)); System.out.println('push -> ' + x); //prints modified stack System.out.println('stack: ' + stk); } //performing pop operation static void popelmnt(Stack stk) { System.out.print('pop -> '); //invoking pop() method Integer x = (Integer) stk.pop(); System.out.println(x); //prints modified stack System.out.println('stack: ' + stk); } } 

Изход:

 stack: [] push -> 20 stack: [20] push -> 13 stack: [20, 13] push -> 89 stack: [20, 13, 89] push -> 90 stack: [20, 13, 89, 90] push -> 11 stack: [20, 13, 89, 90, 11] push -> 45 stack: [20, 13, 89, 90, 11, 45] push -> 18 stack: [20, 13, 89, 90, 11, 45, 18] pop -> 18 stack: [20, 13, 89, 90, 11, 45] pop -> 45 stack: [20, 13, 89, 90, 11] pop -> 11 stack: [20, 13, 89, 90] 

Клас на стека peek() Метод

Той разглежда елемента, който е на върха в стека. Освен това хвърля EmptyStackException ако стекът е празен.

Синтаксис

 public E peek() 

Се завръща: Връща горните елементи на стека.

Нека видим пример за метода peek().

StackPeekMethodExample.java

java здравей свят
 import java.util.Stack; public class StackPeekMethodExample { public static void main(String[] args) { Stack stk= new Stack(); // pushing elements into Stack stk.push('Apple'); stk.push('Grapes'); stk.push('Mango'); stk.push('Orange'); System.out.println('Stack: ' + stk); // Access element from the top of the stack String fruits = stk.peek(); //prints stack System.out.println('Element at top: ' + fruits); } } 

Изход:

 Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange 

Методът търси обекта в стека отгоре. Той анализира параметър, който искаме да търсим. Той връща базираното на 1 местоположение на обекта в стека. Най-горният обект на стека се счита за разстояние 1.

Да предположим, че o е обект в стека, който искаме да търсим. Методът връща разстоянието от върха на стека на събитието, което е най-близо до върха на стека. То използва равно на() метод за търсене на обект в стека.

Синтаксис

 public int search(Object o) 

Параметър: o е желаният обект за търсене.

Се завръща: Той връща местоположението на обекта от върха на стека. Ако върне -1, това означава, че обектът не е в стека.

Нека видим пример за метода search().

excel премахнете първия знак

StackSearchMethodExample.java

 import java.util.Stack; public class StackSearchMethodExample { public static void main(String[] args) { Stack stk= new Stack(); //pushing elements into Stack stk.push('Mac Book'); stk.push('HP'); stk.push('DELL'); stk.push('Asus'); System.out.println('Stack: ' + stk); // Search an element int location = stk.search('HP'); System.out.println('Location of Dell: ' + location); } } 

Java стекови операции

Размер на стека

Можем също да намерим размера на стека, като използваме метода size() на класа Vector. Връща общия брой елементи (размера на стека) в стека.

Синтаксис

 public int size() 

Нека видим пример за метода size() на класа Vector.

StackSizeExample.java

 import java.util.Stack; public class StackSizeExample { public static void main (String[] args) { Stack stk = new Stack(); stk.push(22); stk.push(33); stk.push(44); stk.push(55); stk.push(66); // Checks the Stack is empty or not boolean rslt=stk.empty(); System.out.println('Is the stack empty or not? ' +rslt); // Find the size of the Stack int x=stk.size(); System.out.println('The stack size is: '+x); } } 

Изход:

 Is the stack empty or not? false The stack size is: 5 

Итериране на елементи

Итериране означава извличане на елементите от стека. Можем да извлечем елементи от стека, като използваме три различни метода, както следва:

  • Използвайки итератор() Метод
  • Използвайки за всеки() Метод
  • Използвайки listIterator() Метод

Използване на метода iterator().

Това е методът на интерфейса на Iterator. Той връща итератор върху елементите в стека. Преди да използвате метода iterator(), импортирайтеjava.util.Итераторпакет.

Синтаксис

 Iterator iterator() 

Нека извършим итерация над стека.

StackIterationExample1.java

 import java.util.Iterator; import java.util.Stack; public class StackIterationExample1 { public static void main (String[] args) { //creating an object of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push('BMW'); stk.push('Audi'); stk.push('Ferrari'); stk.push('Bugatti'); stk.push('Jaguar'); //iteration over the stack Iterator iterator = stk.iterator(); while(iterator.hasNext()) { Object values = iterator.next(); System.out.println(values); } } } 

Изход:

метод на java tostring
 BMW Audi Ferrari Bugatti Jaguar 

Използване на метода forEach().

Java предоставя метод forEach() за итерация на елементите. Методът е дефиниран в Итерируем и Поток интерфейс.

Синтаксис

 default void forEach(Consumeraction) 

Нека итерираме стека с помощта на метода forEach().

StackIterationExample2.java

 import java.util.*; public class StackIterationExample2 { public static void main (String[] args) { //creating an instance of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push(119); stk.push(203); stk.push(988); System.out.println('Iteration over the stack using forEach() Method:'); //invoking forEach() method for iteration over the stack stk.forEach(n -> { System.out.println(n); }); } } 

Изход:

 Iteration over the stack using forEach() Method: 119 203 988 

Използване на метода listIterator().

Този метод връща итератор на списък върху елементите в споменатия списък (последователно), започвайки от посочената позиция в списъка. Той итерира стека отгоре надолу.

Синтаксис

 ListIterator listIterator(int index) 

Параметър: Методът анализира параметър с име индекс.

Се завръща: Този метод връща итератор на списък върху елементите последователно.

Изключение: Хвърля се IndexOutOfBoundsException ако индексът е извън диапазона.

Нека итерираме стека с помощта на метода listIterator().

StackIterationExample3.java

 import java.util.Iterator; import java.util.ListIterator; import java.util.Stack; public class StackIterationExample3 { public static void main (String[] args) { Stack stk = new Stack(); stk.push(119); stk.push(203); stk.push(988); ListIterator ListIterator = stk.listIterator(stk.size()); System.out.println('Iteration over the Stack from top to bottom:'); while (ListIterator.hasPrevious()) { Integer avg = ListIterator.previous(); System.out.println(avg); } } } 

Изход:

 Iteration over the Stack from top to bottom: 988 203 119