Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Stack<T> {
- private int size = 0;
- private int left = 0;
- private int right = 0;
- private T[] elements;
- @SuppressWarnings("unchecked")
- private Stack() {
- elements = (T[]) new Object[16];
- }
- @SuppressWarnings("unchecked")
- private Stack(int changedSize) {
- elements = (T[]) new Object[changedSize];
- }
- private int add(int x) {
- return (x + 1) % elements.length;
- }
- private int dec(int x) {
- if (x == 0) {
- return elements.length - 1;
- } else {
- return x - 1;
- }
- }
- @SuppressWarnings("unchecked")
- private void ensureCapacity(int changedSize) {
- if (elements.length <= changedSize) {
- System.out.println("Size = " + size + " , and ensureCapacity");
- T[] temp = (T[]) new Object[2 * changedSize];
- int index = 0;
- for (int i = left; i < right; i = add(i)) {
- temp[index++] = elements[i];
- }
- left = 0;
- right = index;
- elements = temp;
- }
- }
- public void enqueue(T elem) {
- assert elem != null;
- ensureCapacity(++size);
- elements[right] = elem;
- right = add(right);
- }
- public T element() {
- assert size > 0;
- return elements[left];
- }
- public T peek() {
- assert size > 0;
- return elements[dec(right)];
- }
- public T dequeue() {
- assert size > 0;
- T ans = elements[left];
- elements[left] = null;
- left = add(left);
- ensureCapacity(--size);
- return ans;
- }
- public int size() {
- return size;
- }
- public boolean isEmpty() {
- return size == 0;
- }
- public void clear() {
- size = left = right = 0;
- }
- public static void main(String[] args) {
- Stack<Integer> stack = new Stack<>(7);
- System.out.println(stack.isEmpty());
- for (int i = 1; i <= 17; i++) {
- stack.enqueue(i);
- }
- System.out.println(stack.size());
- System.out.println(stack.isEmpty());
- stack.clear();
- System.out.println(stack.peek());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement