Класс Stack

В качестве примера, иллюстрирующего работу с классами, рассмотрим создание практического приложения, реализующего стек. Стек представляет собой структуру данных, работа с которой осуществляется по принципу 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: