В качестве примера, иллюстрирующего работу с классами, рассмотрим создание практического приложения, реализующего стек. Стек представляет собой структуру данных, работа с которой осуществляется по принципу LIFO (англ., last-in first-out – последним пришел – первым вышел). Добавить элемент в стек можно в любой момент, удаляется же только элемент, добавленный последним.
Стек обязательно поддерживает два основных метода:
push(): помещает элемент на вершину стека.
pop(): извлекает элемент из стека, если стек пуст, выдается сообщение об ошибке.
Рассмотрим пример реализации стека целых чисел с помощью массива.
class Stack{
int s[];
int t;
// конструктор
public Stack(int size){
s = new int [size];
t = -1;
}
//методы экземпляра класса
boolean isEmpty(){
return (t == -1);
}
void push(int elem){
if(t+1 < s.length)
s[++t] = elem;
}
int pop(){
if(isEmpty()){
System.out.println("Стек пуст.");
return 0;}
return s[t--];
}
}
В классе Stack дополнительно реализован метод isEmpty(), возвращающий логическое значение true если стек пуст. Класс содержит два атрибута: массив целых чисел – элементы стека; и целую переменную t, индексирующую массив (она всегда содержит индекс вершины стека). Начальное значение переменной t равно -1. Это признак того, что стек пуст.
|
|
Задача 5.3. Дан массив, состоящий из n целых элементов. Необходимо сначала ввести элементы массива, а затем перевернуть массив и вывести результат на экран.
Объяснение: данную задачу можно просто реализовать с помощью стека, так как метод pop() извлекает элемент, помещенный в стек последним.
import java.util.Scanner;
class StackDemo{
static Stack stack;
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Введите количество элементов");
int n = scan.nextInt();
int[] a = new int [n];
//создаем экземпляр класса Stack
Stack stack = new Stack(a.length);
//добавляем элементы в стек
for (int i=0; i < a.length; i++) {
System.out.print("элемент"+ i + ":");
stack.push(scan.nextInt());
}
//извлекаем элементы из стека
System.out.println("Переворот элементов:");
for (int i=0; i < a.length; i++)
System.out.println(stack.pop());
}}
Результат:
Введите количество элементов
элемент0:8
элемент1:9
элемент2:7
элемент3:1
элемент4:2
Переворот элементов:
8