-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathStack.java
More file actions
142 lines (106 loc) · 2.48 KB
/
Copy pathStack.java
File metadata and controls
142 lines (106 loc) · 2.48 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package com.inbravo.ds.stack;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Average execution time = O(1)
*
*
* @author amit.dixit
*
*/
public final class Stack {
/* Array for local storage */
private final long[] storage;
/* Current index stack */
private final AtomicInteger currentIndex = new AtomicInteger(-1);
/* Maximum size limit of Stack */
private final int maxSize;
/**
* Constructor
*
* @param maxSize
*/
public Stack(final int maxSize) {
/* Create array with given size of stack */
storage = new long[maxSize];
/* Set max size */
this.maxSize = maxSize;
}
/**
* Method or API
*
* @param value
*/
public final void push(final long value) {
storage[currentIndex.incrementAndGet()] = value;
}
/**
* Method or API
*
* @param value
*/
public final long pop() {
/* Return value at current index */
final long poppedValue = storage[currentIndex.get()];
/* Reset the current index */
storage[currentIndex.getAndDecrement()] = 0;
return poppedValue;
}
/**
* Method or API
*
* @param value
*/
public final long peek() {
/* Return value at current index */
return storage[currentIndex.get()];
}
/**
* Method or API
*
* @param value
*/
public final boolean isFull() {
return (currentIndex.get() == (maxSize - 1));
}
/**
* Method or API
*
* @param value
*/
public final boolean isEmpty() {
return (currentIndex.get() == -1);
}
@Override
public final String toString() {
return (Arrays.toString(storage));
}
public static final void showStackOverflowError() {
/* Call himself */
showStackOverflowError();
}
/**
* Method or API
*
* @param value
*/
public static final void main(final String... args) {
/* Create new stack */
final Stack stack = new Stack(10);
/* Check for full */
System.out.println("Stack is full ? " + stack.isFull());
/* Check for empty */
System.out.println("Stack is empty ? " + stack.isEmpty());
System.out.println("Before element push : " + stack);
for (int i = 0; i < 10; i++) {
/* Push items on stack */
stack.push(i + 10);
}
System.out.println("After element push : " + stack);
while (!stack.isEmpty()) {
System.out.println("Popped " + stack.pop());
}
System.out.println("After element pop : " + stack);
// stack.showStackOverflowError();
}
}