详细的代码可见github:
https://github.com/AbitGo/myClassWork/tree/master/workspace_ds
栈一般分为顺序栈以及链栈,本文主要讲述链栈。
所需要实现的接口功能。
package com.company.ch3.Stack;
public interface IStack {
public void clear();
public boolean isEmpty();
public int length();
public Object peek();
public boolean push(Object x)throws Exception;
public Object pop();
}
链表栈的主要实现:
package com.company.ch3.Stack.LinkStack;
import com.company.ch2.LinkTable.Node;
import com.company.ch3.Stack.IStack;
public class LinkStack implements IStack {
//栈顶元素
private Node top;
@Override
public void clear() {
this.top = null;
}
@Override
public boolean isEmpty() {
return this.top == null;
}
@Override
public int length() {
int len = 0;
Node p = this.top;
while(p!=null){
++len;
p = p.next;
}
return len;
}
@Override
public Object peek() {
if(!isEmpty()){
return top.data;
}else {
return null;
}
}
@Override
public boolean push(Object x) throws Exception {
Node p = new Node(x);
p.next = top;
top = p;
return true;
}
@Override
public Object pop() {
if(isEmpty()){
System.out.println("栈已空");
return null;
}else{
Node pop = top;
top = top.next;
return pop.data;
}
}
public void display(){
Node p = top;
while (p != null) {
System.out.println(p.data+" ");
p = p.next;
}
System.out.println();
}
}
测试类:
package com.company.ch3.Stack.LinkStack;
public class LinkStackTest {
public static void main(String[] args) throws Exception {
LinkStack sqStack = new LinkStack();
System.out.println("----------插入操作:开始----------");
sqStack.push(1);
sqStack.push(2);
sqStack.push(3);
System.out.println("----------插入操作:结束----------");
System.out.println("----------查看栈顶操作:开始----------");
System.out.println("栈顶元素:"+sqStack.peek());
System.out.println("弹出栈顶元素:" + sqStack.pop());
System.out.println("栈顶元素:"+sqStack.peek());
System.out.println("弹出栈顶元素:" + sqStack.pop());
System.out.println("----------查看栈顶操作:结束----------");
System.out.println("----------查看栈长度操作:开始----------");
System.out.println("长度为:" + sqStack.length());
System.out.println("----------查看栈长度操作:结束----------");
System.out.println("----------清除栈操作:开始----------");
sqStack.clear();
System.out.println("----------清除栈操作:结束----------");
}
}
测试结果:
----------插入操作:开始----------
----------插入操作:结束----------
----------查看栈顶操作:开始----------
栈顶元素:3
弹出栈顶元素:3
栈顶元素:2
弹出栈顶元素:2
----------查看栈顶操作:结束----------
----------查看栈长度操作:开始----------
长度为:1
----------查看栈长度操作:结束----------
----------清除栈操作:开始----------
----------清除栈操作:结束----------