Класът Java Stack разширява класа Vector. Тя ви позволява да създавате нови елементи, да преглеждате елемент в стека, да актуализирате елемент в стека и да изтривате всички елементи от стека. Подрежда данни за обработка в ред първи влязъл-последен излязъл (FILO). Това означава, че можете да добавяте или премахвате елементи само от горната част на стека.

Структурата на данните на стека има пет основни метода. Класът Java Stack обаче има достъп и до над 40 други метода, които наследява от класа Vector.

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

Класът Stack има един конструктор което ви позволява да създадете празен стек. Всеки стек има аргумент тип, който диктува типа данни, които ще съхранява.

импортиране java.util. стек;

публиченкласОсновен{
публиченстатиченневалиденосновен(Низ [] аргументи){
// създаване на стек
Стек Клиенти = нов Стек();
}
}

Кодът по-горе създава стекова структура от данни, наречена Клиенти който съхранява стойности на низове.

Попълване на стек

Един от петте основни метода на класа Stack е натиснете ()

instagram viewer
метод. Той взема един елемент, който има същия тип данни като стека, и го избутва в горната част на стека.

// попълване на стек
Customers.push("Джейн Доу");
Customers.push("Джон Доу");
Customers.push("Патрик Уилямс");
Customers.push("Пол Смит");
Customers.push("Ерик Роу");
Customers.push("Ела Джоунс");
Customers.push("Джесика Браун");

Кодът по-горе попълва стека на клиентите със седем елемента. Той избутва всеки нов елемент до върха на стека. И така, елементът в горната част на купчината клиенти е Джесика Браун. И можете да потвърдите това с помощта на стека надниквам() метод. The надниквам() методът не приема аргументи. Той връща обекта в горната част на стека, без да го премахва.

// преглед на обект в горната част на стека
System.out.println (Customers.peek());

Горният код връща следния изход към конзолата:

Джесика Браун

Вижте елементите в купчина

Структурата на данните на стека е доста ограничителна по отношение на това как ви позволява да взаимодействате с нейните данни. Трябва да използвате стека главно през най-горния му елемент. Можете обаче да използвате и методи, наследени от класа Vector за достъп до произволни елементи. Такива методи включват elementAt и removeElementAt.

Най-лесният начин да получите общ преглед на съдържанието на стека е просто да го отпечатате. Предавайте обект Stack на System.out.println и методът toString() на Stack ще произведе хубаво обобщение:

// преглед на всички елементи на стека
System.out.println (Клиенти);

Кодът по-горе отпечатва следния изход към конзолата:

[Джейн Доу, Джон Доу, Патрик Уилямс, Пол Смит, Ерик Роу, Ела Джоунс, Джесика Браун]

Търсене на позиция на елемент в купчина

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

// намиране на индексна позиция на елемент
System.out.println (Customers.indexOf("Jane Doe"));

Кодът по-горе отпечатва следния изход към конзолата:

0

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

System.out.println (Customers.search("Jane Doe"));

Кодът по-горе отпечатва следния изход към конзолата:

7

Ако доставяте Търсене() или индекс на() методи с елемент, който не е в стека, те ще върнат отрицателен.

System.out.println (Customers.search("Elsa Doe"));
System.out.println (Customers.indexOf("Elsa Doe"));

Кодът по-горе отпечатва следния изход към конзолата:

-1
-1

Актуализиране на елементи в стек

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

// актуализиране на обект
Customers.pop();
Customers.pop();
Customers.push("Ела Джеймс");
Customers.push("Джесика Браун");
System.out.println (Клиенти);

Кодът по-горе отпечатва следния изход към конзолата:

[Джейн Доу, Джон Доу, Патрик Уилямс, Пол Смит, Ерик Роу, Ела Джеймс, Джесика Браун]

Както можете да видите от изхода, кодът актуализира фамилното име на Ела на Джеймс. Това включва процес, който изважда елементи от стека, докато стигнете до целевия обект. След това изважда целевия обект; го актуализира; и го избутва, заедно с елементите, които са били върху целевия елемент, обратно в стека. Ще трябва да използвате програма, която извършва операции като тази по-горе, всеки път, когато искате да актуализирате елемент във вашия стек.

Изтриване на елемент от стек

За да изтриете един елемент от структурата на данните на Stack, можете отново да използвате метода pop(). Ако елементът, който искате да изтриете, не е в горната част, можете да изскачате елементи в горната част, докато стигнете до желания.

Изтриване на всички елементи в стека

За да изтриете всички елементи от стека, можете да използвате a Java цикъл докато с метода pop() за изтриване на елементите един по един. По-ефективен подход обаче е използването на ясно() метод. The ясно() методът е този, който класът Stack наследява от класа Vector. Не приема аргументи, не връща нищо, а просто премахва всички елементи в структурата на данните на Stack.

// изтриване на всички елементи в стека
Customers.clear();
System.out.println (Customers.empty());

Кодът по-горе изтрива всички елементи в стека на клиентите. След това използва празен() метод за проверка дали стекът е празен. The празен() е друг основен метод на Java Stack Class. Не приема аргументи и връща булева стойност. Този метод връща true, ако стекът е празен, и false в противен случай.

Кодът по-горе отпечатва следния изход към конзолата:

вярно

Практически приложения за стековата структура на данните

Структурата на данните на Stack е много ограничителна. Тя не осигурява толкова голяма гъвкавост при обработката на данни, колкото другите структури от данни. Това повдига въпроса: кога трябва да използвате структурата на данните Stack?

Структурата на данните Stack е идеална за приложения, които изискват обработка на данни в обратен ред. Те включват:

  • Приложение, което проверява дали дадена дума е палиндром.
  • Приложение, което преобразува десетични числа в двоични числа.
  • Приложения, които позволяват на потребителите да отменят.
  • Игри, които позволяват на потребителя да се върне към предишни ходове, като например игра на шах.