本篇博文用java实现了数据结构中的顺序栈和链栈
源码分享在github:数据结构,当然你也可以从下面的代码片中获取
1.栈接口 IStack .java
public interface IStack {
public void clear();//置空
public boolean isEmpty();//判空
public int length(); //返回数据元素个数
public Object peek(); //取栈顶元素并返回其值
public void push(Object x)throws Exception; //将数据元素压入栈顶
public Object pop(); //删除并返回栈顶元素
}
2.顺序栈 SqStack .java
public class SqStack implements IStack{
private Object[] stackElem;//对象数组
private int top;//在非空栈中,top始终指向栈顶元素的下一个存储位置,当栈为空时,top值为0
//构造函数
public SqStack(int maxSize) {
top = 0;
stackElem = new Object[maxSize];//为栈分配maxSize个存储单元
}
//栈置空
@Override
public void clear() {
top = 0;
}
//判断栈是否为空
@Override
public boolean isEmpty() {
return top == 0;
}
//求栈中数据元素个数
@Override
public int length() {
return top;
}
//取栈顶元素
@Override
public Object peek() {
if(!isEmpty()){
return stackElem[top-1];
}else{
return null;
}
}
//入栈
@Override
public void push(Object x) throws Exception {
if(top == stackElem.length)//栈满
throw new Exception("栈已满");
else
stackElem[top++] = x;//先将X赋值给stackElem[top],再将top加一
}
//出栈
@Override
public Object pop() {
if(isEmpty())
return null;
else
return stackElem[--top];//先将top减一,再返回stackElem[top]的值
}
//输出栈中所有元素(从栈顶到栈底元素)
public void display(){
for(int i = top-1;i>=0;i--){
System.out.print(stackElem[i].toString()+" ");//输出
}
}
}
3.链栈 LinkStack.java
public class LinkStack implements IStack {
private Node top;//栈顶元素的引用
//将栈置空
@Override
public void clear() {
top = null;
}
//判断栈是否为空
@Override
public boolean isEmpty() {
return top==null;
}
//求栈的长度
@Override
public int length() {
Node p = top;
int length = 0;
while(p!=null){
p = p.next;
++length;
}
return length;
}
//取栈顶元素并返回其值
@Override
public Object peek() {
if(!isEmpty())
return top.data;
else
return null;
}
//入栈
@Override
public void push(Object x) throws Exception {
Node p = new Node(x);
p.next = top;
top = p;
}
//出栈
@Override
public Object pop() {
if(isEmpty()){
return null;
}else{
Node p = top;
top = top.next;
return p.data;
}
}
//输出栈中所有数据元素(顶到底)
public void display(){
Node p = top;
while(p!=null){
System.out.print(p.data.toString()+" ");
p = p.next;//指针后移
}
}
}
4.节点类 Node.java
public class Node {
public Object data;//存放节点值
public Node next;//后继节点的引用
//无参数时的构造函数
public Node(){
this(null,null);
}
//带一个参数时的构造函数
public Node(Object data){
this(data,null);
}
//带两个参数的构造函数
public Node(Object data, Node next){
this.data = data;
this.next = next;
}
}
数据结构这个系列是我学习时做的笔记,会持续更新,详见我的github(地址在文章开头)或我的其他博文,感觉不错的话,关注一下吧!