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]
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java栈之链式栈存储结构
# Java栈之存储
# Javasript设计模式之链式调用详解
# Java及Android中常用链式调用写法简单示例
# java队列实现方法(顺序队列
# 链式队列
# 循环队列)
# JAVA 实现二叉树(链式存储结构)
# JAVA中实现链式操作(方法链)的简单例子
# java中实体类转Json的2种方法
# java中实体类和JSON对象之间相互转化
# java反射遍历实体类属性和类型
# 并赋值和获取值的简单方法
# Java实体类实现链式操作实例解析
# 链式
# 弹出
# 两次
# 为空
# 希望能
# 只有一个
# 谢谢大家
# 但不
# 下个
# 值为
# 链表
# lt
# gt
# data
# private
# Node
# 空链栈
# null
# size
# top
相关文章:
香港服务器建站指南:免备案优势与SEO优化技巧全解析
实惠建站价格推荐:2025年高性价比自助建站套餐解析
简历在线制作网站免费版,如何创建个人简历?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何零基础开发自助建站系统?完整教程解析
广州营销型建站服务商推荐:技术优势与SEO优化解析
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
C++如何编写函数模板?(泛型编程入门)
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
建站VPS能否同时实现高效与安全翻墙?
图册素材网站设计制作软件,图册的导出方式有几种?
如何在宝塔面板创建新站点?
如何用5美元大硬盘VPS安全高效搭建个人网站?
网站制作新手教程,新手建设一个网站需要注意些什么?
宝塔建站后网页无法访问如何解决?
北京企业网站设计制作公司,北京铁路集团官方网站?
利用JavaScript实现拖拽改变元素大小
建站之星如何一键生成手机站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
如何在万网ECS上快速搭建专属网站?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
电商网站制作公司有哪些,1688网是什么意思?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在阿里云购买域名并搭建网站?
建站之星图片链接生成指南:自助建站与智能设计教程
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
如何快速上传建站程序避免常见错误?
如何用狗爹虚拟主机快速搭建网站?
如何通过西部数码建站助手快速创建专业网站?
长沙企业网站制作哪家好,长沙水业集团官方网站?
C++时间戳转换成日期时间的步骤和示例代码
香港服务器租用费用高吗?如何避免常见误区?
宝塔Windows建站如何避免显示默认IIS页面?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
如何通过IIS搭建网站并配置访问权限?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
建站之星后台密码遗忘或太弱?如何重置与强化?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何通过虚拟机搭建网站?详细步骤解析
建站之星免费模板:自助建站系统与智能响应式一键生成
完全自定义免费建站平台:主题模板在线生成一站式服务
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何在云主机快速搭建网站站点?
制作旅游网站html,怎样注册旅游网站?
专业网站建设制作报价,网页设计制作要考什么证?
*请认真填写需求信息,我们会在24小时内与您取得联系。