Stack test = new Stack(4);
System.out.println(test.isEmpty());
test.push(12);
System.out.println(test.isEmpty());
System.out.println(test.peek());
test.push(13);
test.push(14);
test.push(15);
test.push(16);
test.push(17);
test.push(‘(‘);
System.out.println(test.size());
System.out.println(test.peek().equals(‘(‘));
test.pop();
System.out.println(test.peek());
test.pop();
System.out.println(test.peek());
test.pop();
System.out.println(test.peek());
test.pop();
System.out.println(test.peek());
test.pop();
System.out.println(test.peek());
System.out.println(test.isEmpty());
test.pop();
System.out.println(test.peek());
test.pop();
System.out.println(test.isEmpty());
|
true
false 12 7 true 17 16 15 14 13 false 12 true |
Что такое стек прекрасно расскажет Википедия.
Реализация динамического стека. Есть приватная функция resize, которая меняет размер массива, выделяемого под стек. Массив копируется в новый с помощью Java’вского копирования массивов.
Есть тестовый вывод, для проверки корректности всех методов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
/** * Created by green on 19.12.15. */ class Stack { private int size; private Object[] date; private int capacity; public Stack(){ date = new Object[2]; capacity = 2; } public Stack(int x){ date = new Object[x];; capacity = x; } public boolean isEmpty(){ return size == 0; } private void resize(int x){ Object[] newDate = new Object[x]; System.arraycopy(date, 0, newDate, 0, size); date = null; date = newDate; } public void push(Object x){ if(size == capacity){ resize(2*capacity); } date[size++] = x; } public Object pop(){ if(isEmpty()){ return null; } if(size < capacity/2){ resize(capacity/2); } Object temp = date[size -1]; size = size -1; return temp; } public Object peek(){ if(isEmpty()) return null; return date[size-1]; } public void clear(){ size = 0; } public int size(){ return size; } public int getCapacity(){ return size; } } public class task { public static void main(String[] args) { Stack test = new Stack(4); System.out.println(test.isEmpty()); test.push(12); System.out.println(test.isEmpty()); System.out.println(test.peek()); test.push(13); test.push(14); test.push(15); test.push(16); test.push(17); test.push('('); System.out.println(test.size()); System.out.println(test.peek().equals('(')); test.pop(); System.out.println(test.peek()); test.pop(); System.out.println(test.peek()); test.pop(); System.out.println(test.peek()); test.pop(); System.out.println(test.peek()); test.pop(); System.out.println(test.peek()); System.out.println(test.isEmpty()); test.pop(); System.out.println(test.peek()); test.pop(); System.out.println(test.isEmpty()); } } |
Если можно написать другие структуры данных, для повышения своей оценки то прошу вас написать сюда, какие бы вы еще хотели увидеть реализации.
stack через «a» пишется 🙂
Я знаю. У меня stack называется тело программы
Что это за «тело программы»? Такая терминология может только снизить оценку.
Давайте сделаем так. У Вас два класса — оставляете только один класс. Переносите туда функцию main и всё остальное. Назовите его без орфографических ошибок — Stack, StackArray, MyStack, Stack1997…
И обязательно с большой буквы.
Ключевые слова и тесты тоже важны для тех, кто хочет хорошую оценку. Оценка ведь соответствует не только количеству работ, но и качеству.
Лучше?