Java栈之链式栈存储结构的实现代码
作者:lqh 时间:2022-01-18 09:38:48
Java栈之链式栈存储结构实现
一、链栈
采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈。
二、栈的链式存储结构实现
package com.ietree.basic.datastructure.stack;
/**
* 链栈
*
* Created by ietree
* 2017/4/29
*/
public class LinkStack<T> {
// 定义一个内部类Node,Node实例代表链栈的节点
private class Node {
// 保存节点的数据
private T data;
// 指向下个节点的引用
private Node next;
// 无参构造器
public Node() {
}
// 初始化全部属性的构造器
public Node(T data, Node next) {
this.data = data;
this.next = next;
}
}
// 保存该链栈的栈顶元素
private Node top;
// 保存该链栈中已包含的节点数
private int size;
// 创建空链栈
public LinkStack() {
// 空链栈,top的值为null
top = null;
}
// 以指定数据元素来创建链栈,该链栈只有一个元素
public LinkStack(T element) {
top = new Node(element, null);
size++;
}
// 返回链栈的长度
public int length() {
return size;
}
// 进栈
public void push(T element) {
// 让top指向新创建的元素,新元素的next引用指向原来的栈顶元素
top = new Node(element, top);
size++;
}
// 出栈
public T pop() {
Node oldTop = top;
// 让top引用指向原栈顶元素的下一个元素
top = top.next;
// 释放原栈顶元素的next引用
oldTop.next = null;
size--;
return oldTop.data;
}
// 访问栈顶元素,但不删除栈顶元素
public T 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();
}
}
}
测试类:
package com.ietree.basic.datastructure.stack;
/**
* Created by ietree
* 2017/4/29
*/
public class LinkStackTest {
public static void main(String[] args) {
LinkStack<String> stack = new LinkStack<String>();
stack.push("aaaa");
stack.push("bbbb");
stack.push("cccc");
stack.push("dddd");
System.out.println(stack);
System.out.println("访问栈顶元素:" + stack.peek());
System.out.println("第一次弹出栈顶元素:" + stack.pop());
System.out.println("第二次弹出栈顶元素:" + stack.pop());
System.out.println("两次pop之后的栈:" + stack);
}
}
程序输出:
[dddd, cccc, bbbb, aaaa]
访问栈顶元素:dddd
第一次弹出栈顶元素:dddd
第二次弹出栈顶元素:cccc
两次pop之后的栈:[bbbb, aaaa]
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://www.cnblogs.com/Dylansuns/p/6788961.html
标签:Java,栈,存储
0
投稿
猜你喜欢
Java 数据结构深入理解ArrayList与顺序表
2023-02-15 14:24:07
六款值得推荐的android(安卓)开源框架简介
2023-06-24 01:46:54
Java内部类知识汇总
2023-08-18 14:06:54
Springboot Vue可配置调度任务实现示例详解
2023-11-09 03:33:19
Spring Security 强制退出指定用户的方法
2022-10-04 18:13:04
java解析json数组方式
2023-08-10 17:22:14
SSH框架网上商城项目第10战之搭建商品类基本模块
2023-11-12 14:00:29
Spring Boot使用profile如何配置不同环境的配置文件
2023-11-25 12:52:36
Java使用DualPivotQuicksort排序
2022-05-22 20:58:12
Java 字符串反转实现代码
2023-01-09 10:04:52
Java计算文本MD5加密值的方法示例
2023-11-15 13:18:48
springboot异常处理的基本规范
2023-11-23 15:48:19
关于SpringGateway调用服务 接受不到参数问题
2023-08-31 13:05:00
详解JAVA 时间处理相关类
2022-11-07 03:12:36
SpringSecurity报错authenticationManager must be spec的解决
2021-07-27 21:52:27
使用Swing绘制动态时钟
2023-11-24 07:05:12
Java编写实现坦克大战小游戏
2023-11-24 09:15:34
android使用PullToRefresh实现下拉刷新和上拉加载
2023-08-06 11:06:58
java并发编程专题(六)----浅析(JUC)Semaphore
2023-07-27 23:30:28
JPA save()方法将字段更新为null的解决方案
2023-10-28 22:29:28