单链表实现入栈、出栈功能
代码如下
main函数,循环显示
public static void main(String[] args) {
StackFun singleStack = new StackFun();
String key = "";
boolean flag = true;
Scanner scanner = new Scanner(System.in);
while(flag){
System.out.println("s:show:显示栈");
System.out.println("e:exit:退出程序");
System.out.println("ph:push:入栈");
System.out.println("pp:pop:出栈");
System.out.println("请输入命令:");
key = scanner.next();
switch (key) {
case "s":
singleStack.show();
break;
case "e":
scanner.close();
flag = false;
break;
case "ph":
System.out.println("请输入一个数:");
SingleStack value = new SingleStack(scanner.nextInt());
singleStack.push(value);
break;
case "pp":
try {
int res = singleStack.pop();
System.out.printf("出栈的数据是%d\n",res);
} catch (Exception e) {
//TODO: handle exception
System.out.println(e.getMessage());
}
break;
default:
break;
}
}
System.out.println("程序退出");
}
###栈方法类
class StackFun{
SingleStack head = new SingleStack(0);
//判断当前栈是否为空
public boolean isEmpty(){
return head.getNext() == null;
}
//显示栈情况
public void show(){
if(isEmpty()){
System.out.println("栈空");
return;
}
SingleStack temp = head.getNext();
while(true){
if(temp == null){
break;
}
System.out.printf("Stack[%d]\n",temp.getData());
temp = temp.getNext();
}
}
//入栈
public void push(SingleStack newstack){
SingleStack temp = head;
while(true){
if(temp.getNext() == null){
temp.setNext(newstack);
break;
}
temp = temp.getNext();
}
}
//出栈
public int pop(){
if(isEmpty()){
throw new RuntimeException("栈空");//返回值为int,无法return,使用异常处理
}
SingleStack temp = head.getNext();
int flag = 0;//存放要出栈节点的值
while(true){
if(temp.getNext() == null){//只有一个节点时
flag = temp.getData();//先记录temp节点的值再断开连接,释放栈
head.setNext(null);
break;
}
if(temp.getNext().getNext() == null){//有多个节点
flag = temp.getNext().getData();
temp.setNext(null);
break;
}
temp = temp.getNext();
}
return flag;
}
}
class SingleStack{
private int data;
private SingleStack next;
public SingleStack(int data) {
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public SingleStack getNext() {
return next;
}
public void setNext(SingleStack next) {
this.next = next;
}
}