Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Containers;
- import org.jetbrains.annotations.NotNull;
- import java.util.Iterator;
- import java.util.NoSuchElementException;
- public class Stack<Item> implements Iterable<Item> {
- private int size;
- private Node first;
- private class Node{
- private Item item;
- private Node next;
- }
- private class MyIterator implements Iterator<Item> {
- private Node current = first;
- @Override
- public boolean hasNext() {
- return current != null;
- }
- @Override
- public Item next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- Item item = current.item;
- current = current.next;
- return item;
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
- @NotNull
- public Iterator<Item> iterator() {
- return new MyIterator();
- }
- public Stack() {
- first = null;
- size = 0;
- }
- public int getSize() {
- return size;
- }
- public boolean isEmpty() {
- return first == null;
- }
- public void push(Item item) {
- Node previousItem = first;
- first = new Node();
- first.item = item;
- first.next = previousItem;
- size++;
- }
- public Item pop() {
- if (isEmpty()){
- throw new IndexOutOfBoundsException("Stack is empty");
- }
- Item item = first.item;
- first = first.next;
- size--;
- return item;
- }
- public Item peek() {
- if (isEmpty()){
- throw new IndexOutOfBoundsException("Stack is empty");
- }
- return first.item;
- }
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder("Stack [");
- for (Item item : this) {
- builder.append(item);
- builder.append(' ');
- }
- builder.append("]\n");
- builder.append("Size: ").append(size);
- return builder.toString();
- }
- }
Add Comment
Please, Sign In to add comment