Java数据结构中关于栈的实现

Java数据结构中关于栈的实现

Java中栈分为顺序栈和链式栈;在了解什么是栈之前我们首先要了解什么是栈?简单来说就是一种拿东西和放东西的方式。举一个例子:
当四辆小车(A、B、C、D)开进一个单行的死胡同时,A车先开进去,然后是B车、C车、之后是D车。在这些车要离开这个死胡同时,A车不可能先出来(提示杠精四辆都不会飞),只能让D车先开出,然后是C车、B车,最后是A车。即先进后出,后进先出

顺序栈:
// 基于数组实现的顺序栈
public class ArrayStack {
private String[] items; // 数组
private int count; // 栈中元素个数
private int n; // 栈的大小
// 初始化数组,申请一个大小为 n 的数组空间
public ArrayStack(int n) {
this.items = new String[n];
this.n = n;
this.count = 0;
}
// 入栈操作
public boolean push(String item) {
// 数组空间不够了,直接返回 false,入栈失败。
if (count == n) return false;
// 将 item 放到下标为 count 的位置,并且 count 加一
items[count] = item;
++count;
return true;
}
// 出栈操作
public String pop() {
// 栈为空,则直接返回 null
if (count == 0) return null;
// 返回下标为 count-1 的数组元素,并且栈中元素个数 count 减一
String tmp = items[count-1];
–count;
return tmp;
}
}
链式栈:
// 基于链表实现的链式栈
public class LinkStack {
// 定义一个内部类Node,Node实例代表链栈的节点
private class Node {
private Data data;// 保存节点的数据
private Node next;// 指向下个节点的引用
// 无参构造器
public Node() {
}
// 初始化全部属性的构造器
public Node(Data data, Node next) {
this.data = data;
this.next = next;
}
}
// 保存该链栈的栈顶元素
private Node top;// 保存该链栈中已包含的节点数
private int size; // 创建空链栈
public LinkStack() {
top = null;// 空链栈,top的值为null
}
// 以指定数据元素来创建链栈,该链栈只有一个元素
public LinkStack(Data data) {
top = new Node(data, null);
size++;
}
// 返回链栈的长度
public int length() {
return size;
}
// 进栈
public void push(Data data) {
// 让top指向新创建的元素,新元素的next引用指向原来的栈顶元素
top = new Node(data, top);
size++;
}
// 出栈
public Data pop() {
Node oldTop = top;
// 让top引用指向原栈顶元素的下一个元素
top = top.next;
// 释放原栈顶元素的next引用
oldTop.next = null;
size–;
return oldTop.data;
}
// 访问栈顶元素,但不删除栈顶元素
public Data peek(){
return top.data;
}
// 判断链栈是否为空栈
public boolean empty() {
return size == 0;
}
// 清空链栈
public void clear() {
top = null;
size = 0;
}
public String toString() {
// 链栈为空栈时
if (empty()) {
return “[]”;
} else {
StringBuilder sb = new StringBuilder("[");
for (Node current = top; current != null; current = current.next) {
sb.append(current.data.toString() + “, “);
}
int len = sb.length();
return sb.delete(len - 2, len).append(”]”).toString();
}
}
}
该博客内容仅供学习参考,请勿用于商业行为。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值