栈 Stack
先进后出的有序列表
只能从同一端进行操作,变化的一端称为栈顶,固定的一端为栈底
出栈 pop 入栈 push
数组实现
private int maxsize;
private int top = -1;
private int[] stack;
1.判断栈满 top指向栈顶
public boolean isFull() {
return top == maxsize - 1;
}
2.判断栈空
public boolean isEmpty() {
return top == -1;
}
3.入栈 push
public void push(int val) {
if (isFull()){
System.out.println("栈满。。。");
return;
}
top++;
stack [top]=val;
}
4.出栈
public int pop(){
if (isEmpty()){
throw new RuntimeException("栈为空...");
}
int value=stack[top];
top--;
return value;
}
5.遍历栈
public void showStack(){
if (isEmpty()){
throw new RuntimeException("栈为空...");
}
for (int i = top; i >=0 ; i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
链表实现
节点
private int data;
private StackNode next;
//栈底指针
private StackNode bot = new StackNode(0);
//栈顶指针
StackNode top = bot;v
入栈 push
public void push(StackNode stackNode) {
StackNode temp = top;
while (true) {
if (temp == top) break;
temp = temp.getNext();
}
stackNode.setNext(top);
top = stackNode;
}
出栈 pop
public StackNode pop() {
if (top == bot) {
System.out.println("栈为空...");
} else {
StackNode val = top;
top = top.getNext();
int no = val.getData();
System.out.printf("出栈元素为:%d\n", no);
}
return null;
}
遍历栈
public void showStack() {
if (top.getNext() == null) {
System.out.println("这是一个空栈!!!");
return;
}
//通过辅助变量去遍历栈
StackNode tempNode = top;
while (true) {
if (tempNode.getNext() == null) break;
System.out.println(tempNode);
tempNode = tempNode.getNext();
}
}