目录
2.1 先建立实体类LinkStackNode类和LinkStack类;
1. 基本概念;
栈的链式存储简称链栈;
2. 设计与实现;
链栈是一种特殊的线性表,链栈可以通过链式线性表(单链表)来实现;
2.1 先建立实体类LinkStackNode类和LinkStack类;
LinkStackNode:
包括链栈结点的数据域和指针域;
数据域是Object类型的,指针域是LinkStackNode类型的
LinkStack:
包括链栈的头结点和链表元素个数;
头结点是LinkStackNode类型的,链栈元素个数是int型的
LinkStackNode:
package com.java.model;
public class LinkStackNode {
//栈结点的数据域
public Object data;
//栈结点的指针
public LinkStackNode next;
//构造方法
public LinkStackNode(Object data,LinkStackNode next) {
this.data = data;
this.next = next;
}
}
LinkStack:
package com.java.model;
public class LinkStack {
//栈顶指针,也就是所谓的头结点
public LinkStackNode head;
//栈的容量
public int size;
public LinkStack(LinkStackNode head, int size) {
this.head = head;
this.size = size;
}
}
2.2 建立方法类LinkStackDao类;
这里面包含一些对链栈操作的方法;
如:初始链栈,入栈,出栈,获取栈顶元素,获取链栈中元素个数等;
package com.java.dao;
import com.java.model.LinkStack;
import com.java.model.LinkStackNode;
public class LinkStackDao {
//初始化栈
public LinkStack Init_LinkStack(){
//初始化栈顶指针
LinkStackNode head=new LinkStackNode(0,null);
//初始化栈
LinkStack stack=new LinkStack(head,0);
return stack;
}
//入栈
public void Push_LinkStack(LinkStack stack,Object data){
if (stack == null){
return;
}
if (data == null){
return;
}
//创建新插入的结点,也就是栈顶指针后面的第一个元素,因为只能在栈顶进行元素插入或删除
LinkStackNode newNode=new LinkStackNode(data,null);
//进入插入操作
newNode.next=stack.head.next;
//栈顶指针的next等于新插入结点
stack.head.next=newNode;
//栈容量加1
stack.size++;
}
//出栈
public void Pop_LinkStack(LinkStack stack){
if (stack == null){
return;
}
if (stack.size == 0){
return;
}
//删除栈顶指针后面的第一个元素
stack.head.next=stack.head.next.next;
//栈容量减1
stack.size--;
}
//返回栈顶元素
public Object Top_LinkStack(LinkStack stack){
if (stack == null){
return null;
}
if (stack.size == 0){
return null;
}
//栈顶元素也就是栈顶指针后面的第一个元素
return stack.head.next.data;
}
//返回栈容量,也就是栈元素个数
public int Size_LinkStack(LinkStack stack){
if (stack == null){
return -1;
}
return stack.size;
}
//清空栈
public void Clear_LinkStack(LinkStack stack){
if (stack == null){
return ;
}
stack.head.next=null;
stack.size=0;
}
}
2.2 测试类LinkStackMain类;
这个包含主函数,进行测试的类;
package com.java.main;
import com.java.dao.LinkStackDao;
import com.java.model.LinkStack;
public class LinkStackMain {
public static void main(String[] args) {
LinkStackDao linkStackDao=new LinkStackDao();
//初始化栈
LinkStack stack=linkStackDao.Init_LinkStack();
//入栈
linkStackDao.Push_LinkStack(stack,"A");
linkStackDao.Push_LinkStack(stack,"B");
linkStackDao.Push_LinkStack(stack,"C");
linkStackDao.Push_LinkStack(stack,"D");
linkStackDao.Push_LinkStack(stack,"E");
//输出栈元素
while(stack.size>0){
//查找栈顶元素
Object o=linkStackDao.Top_LinkStack(stack);
System.out.println(o);
//出栈
linkStackDao.Pop_LinkStack(stack);
}
}
}
测试结果:
项目源码地址: