栈的顺序存储
用数组来实现
//栈的顺序存储:用数组来存放元素:数组0端为栈底;length-1端为栈顶
public class MySqStack {
int[] data;//数组
int top;//数组的下标
public MySqStack(int size) {
data = new int[size];
top = -1;
}
// 进栈
public boolean push(int element) {
// 如果栈满,则不能插入
if (top == data.length - 1) {
// throw new RuntimeException("stack is empty");
return false;
} else {
top++;
data[top] = element;
return true;
}
}
// 出栈
public int pop() {
// 如果栈中没有元素
if (top == -1) {
throw new RuntimeException("stack is empty");
} else {
return data[top--];
}
}
// 取栈顶元素
public int GetTop() {
// 如果栈中没有元素
if (top == -1) {
throw new RuntimeException("stack is empty");
} else {
return data[top];
}
}
栈的链式存储
用单链表来实现
public class LinkStack {
class Node {
int data;
Node next;
}
// 创建头节点
private Node header = new Node();
// 新节点进栈:头插入法:插入头节点之后
public boolean push(int data) {
Node node = new Node();
node.data = data;
node.next = header.next;
header.next = node;
return true;
}
//出栈:将头节点之后的节点出栈
public int pop() {
if(header.next == null) {
return -1;
}
else {
int rtn = 0;
rtn = header.next.data;
header.next = header.next.next;
return rtn;
}
}
//取栈顶元素
public int getTop() {
if(header.next == null) {
return -1;
}
else {
return header.next.data;
}
}