Java-栈实现

栈的实现比较简单,因为栈可以看作是一个动态数组或链表,许多操作都可以借用它们实现

数组栈

  • 下面是具体实现的代码
  • 需要使用前面的动态数组类,然后创建一个Stack接口,去实现这个接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface Stack<E> {
// 返回栈的大小
int getSize();

// 判断栈是否为空
boolean isEmpty();

// 压栈
void push(E e);

// 弹栈
E Pop();

// 返回栈顶元素值
E Peek();
}
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
public class ArrayStack<E> implements Stack<E> {

Array<E> array;

ArrayStack(int capacity) {
array = new Array<>(capacity);
}

ArrayStack() {
array = new Array<>();
}

@Override
public int getSize() {
return array.getSize();
}

@Override
public boolean isEmpty() {
return array.isEmpty();
}

@Override
public void push(E e) {
array.addLast(e);
}

@Override
public E Pop() {
return array.removeLast();
}

@Override
public E Peek() {
return array.getLast();
}

@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack:");
res.append("[");
for (int i = 0; i < getSize(); i++) {
res.append(array.get(i));
if (i != getSize() - 1) {
res.append(", ");
}
}
res.append("] top");
return res.toString();
}
}

链表栈

  • 实现Stack接口,借助LinkedList 完成功能
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
package dataStructure;

public class LinkedListStack<E> implements Stack<E> {
private LinkedList<E> linkedList;

public LinkedListStack() {
linkedList = new LinkedList<>();
}

@Override
public int getSize() {
return linkedList.getSize();
}

@Override
public boolean isEmpty() {
return linkedList.isEmpty();
}

@Override
public void push(E e) {
linkedList.addFirst(e);
}

@Override
public E Pop() {
return linkedList.removeFirst();
}

@Override
public E Peek() {
return linkedList.getFirst();
}

@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: top ");
res.append(linkedList);
return res.toString();
}

}