首先定义Stack接口
package com.chen.arithmetic_test.stack_test;
/**
* Created by ChenMP on 2017/7/4.
*/
public interface Stack {
//入栈
public void push(Object obj) throws Exception;
//出栈
public Object pop() throws Exception;
//获得栈顶元素
public Object getTop() throws Exception;
//判断栈是否为空
public boolean isEmpty();
}
定义Node元素类
package com.chen.arithmetic_test.stack_test;
/**
* Created by ChenMP on 2017/7/4.
*/
public class Node {
private Object nodeData; //该节点数据值
private Node footNode; //底部节点
public Node(Object nodeData) {
this.nodeData = nodeData;
}
public Object getNodeData() {
return nodeData;
}
public void setNodeData(Object nodeData) {
this.nodeData = nodeData;
}
public Node getFootNode() {
return footNode;
}
public void setFootNode(Node footNode) {
this.footNode = footNode;
}
@Override
public String toString() {
return "Node{" +
"nodeData=" + nodeData +
'}';
}
}
编写LinkStack类
package com.chen.arithmetic_test.stack_test;
/**
* Created by ChenMP on 2017/7/4.
*/
public class LinkStack implements Stack {
private Node head; //栈顶元素
private int size; //栈大小
private int maxSize; //栈最大长度
public LinkStack() {
this.head = null;
this.size = 0;
this.maxSize = 10; //设置栈默认大小为10
}
public LinkStack(int maxSize) {
this.head = null;
this.size = 0;
this.maxSize = maxSize;
}
@Override
public void push(Object obj) throws Exception {
if (size == maxSize)
throw new Exception("堆栈已满!");
Node currentNode = new Node(obj);
currentNode.setFootNode(head);
this.head = currentNode;
size++;
}
@Override
public Object pop() throws Exception {
if (0 == size)
throw new Exception("堆栈为空!");
Node currentNode = this.head;
head = currentNode.getFootNode();
size--;
return currentNode;
}
@Override
public Object getTop() throws Exception {
if (0 == size)
throw new Exception("堆栈为空!");
return head;
}
@Override
public boolean isEmpty() {
return size>0?false:true;
}
}
编写测试类
package com.chen.arithmetic_test.stack_test;
import java.util.Scanner;
/**
* Created by ChenMP on 2017/7/4.
*/
public class TestStack {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
LinkStack stack = new LinkStack(10);
Scanner in = new Scanner(System.in);
int temp;
for(int i=0;i<10;i++)
{
System.out.println("请输入第"+(i+1)+"个整数:");
temp = in.nextInt();
stack.push(temp);
}
while(!stack.isEmpty())
{
System.out.println(stack.pop());
}
}
}
除去我们所知的堆栈在程序之中的作用,其实在我们常用的编译软件也可以用其做到以下两点:
一、括号匹配的问题
二、表达式计算的问题
具体的实现不作演示,可以思考其原理。