1 package struct;
2
3 //接口
4 interface ILinkStack{
5 //栈中元素个数(栈大小)
6 int size();
7 //取栈顶元素
8 Object top();
9 //判断栈是否为空
10 boolean isEmpty();
11 //入栈
12 Object pop();
13 //出栈
14 Object push(Object value);
15 //清空栈
16 void clear();
17 }
18
19 //工厂类
20 class Factory2{
21 private Factory2(){}
22 public static ILinkStack getILinkStackInstance(){
23 return new LinkStackImpl();
24 }
25 }
26
27 class LinkStackImpl implements ILinkStack {
28 //栈顶元素
29 Node top;
30 //链表长度记录入栈元素
31 private int count;
32 class Node{
33 Node prev;
34 Node next;
35 Object data;
36 public Node(Object data) {
37 this.data = data;
38 }
39 }
40
41 public int size() {
42 return count;
43 }
44
45 public Object top() {
46 return top.data;
47 }
48 //判栈空
49 public boolean isEmpty() {
50 return (size()==0);
51 }
52 //入栈
53 public Object push(Object value) {
54 Node node = new Node(value);
55 if(top == null){
56 top = node;
57 }else{
58 top.next = node;
59 node.prev = top;
60 top = top.next;
61 }
62 count++;
63 return top;
64 }
65 public void print(){
66 System.out.println("从栈顶到栈底打印栈中元素:");
67 myPrint(top);
68 return;
69 }
70 //栈顶->栈底打印链表
71 private void myPrint(Node top){
72 for(Node node = top;node!=null;node=node.prev){
73 System.out.print(node.data+" ");
74 }
75 }
76 //出栈
77 public Object pop() {
78 Node node = top;
79 if(top == null){
80 System.out.println("空栈无要出栈元素");
81 return -1;
82 }else{
83 top = top.prev;
84 node.prev = null;
85 node.data = null;
86 }
87 count--;
88 return top();
89 }
90 //清空栈
91 public void clear(){
92 Node node1 = top;
93 for(Node node = top;node!=null;){
94 node = node.prev;
95 node1.data = null;
96 node1.prev = null;
97 count--;
98 }
99 }
100 }
101 public class LinkStack {
102 public static void main(String[] args) {
103 ILinkStack linkStack = Factory2.getILinkStackInstance();
104 //向下转型
105 LinkStackImpl linkStack1 = (LinkStackImpl)linkStack;
106 System.out.println("============测试isEmpty函数(空栈)=================");
107 System.out.println(linkStack.isEmpty());
108 System.out.println("============测试push和print函数=================");
109 linkStack.push(5);
110 linkStack.push(9);
111 linkStack.push(10);
112 linkStack.push(1);
113 linkStack.push(8);
114 linkStack.push(12);
115 linkStack.push(6);
116 linkStack.push(3);
117 linkStack1.print();
118 System.out.println();
119 System.out.println("============入栈后测试top函数=================");
120 System.out.println(linkStack.top());
121 System.out.println("============入栈后测试size函数=================");
122 System.out.println(linkStack.size());
123 System.out.println("============测试pop和print函数=================");
124 linkStack.pop();
125 linkStack.pop();
126 linkStack.pop();
127 linkStack1.print();
128 System.out.println();
129 System.out.println("============出站后测试top函数=================");
130 System.out.println(linkStack.top());
131 System.out.println("============出栈后测试size函数=================");
132 System.out.println(linkStack.size());
133 System.out.println("============测试clear后size函数=================");
134 linkStack.clear();
135 System.out.println(linkStack.size());
136 }
137 }

链式栈——Java实现的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. java 实现简单的链式栈

    package com.my; /** * 链式栈 * @author wanjn * */ public class LinkedStack { private Node head; private ...

  3. Java的顺序栈和链式栈

    栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...

  4. Java栈之链式栈存储结构实现

    一.链栈 采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈. 二.栈的链式存储结构实现 package com.ietree.basic.datastructure.stack; /** * 链 ...

  5. 数据结构笔记--栈的总结及java数组实现简单栈结构

    杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于 ...

  6. java 静态内部类小总结

    内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权 ...

  7. 数据结构栈的java实现

    近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作“先进后出”表. 实现方式是这样的:首先定义了一个接口,然后通过这个接口实现了线 ...

  8. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  9. 栈详解及java实现

    导读 栈和队列是有操作限制的线性表. 目录 1.栈的概念.特点.存储结构. 2.栈的java实现及运用. 概念 栈是一种只允许在一端进行插入或删除的线性表. 1.栈的操作端通常被称为栈顶,另一端被称为 ...

随机推荐

  1. 【网络好文】---MySQL为Null导致的四大坑

    正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如所示: select version(); -- 版本为 8.0.22 "兵马未动粮草先行",看完了相关的配置之 ...

  2. 关于linux7.x系列下的 systemd 的理解

    历史上Linux的启动一直采用init进程,下面的命令用来启动服务. $ sudo /etc/init.d/apache2 start #或者 $ service apache2 start 这种方法 ...

  3. “TCP:三次握手”分析——以一个简单的“服务器”和“客户端”为例

    linux&C这两天学到了网络编程这一章,自己写了一个小的"服务器"和"客户端"程序,目的在于简单理解tcp/ip模型,以及要搭建一台简单服务器,服务器 ...

  4. ubuntu图标

    linux桌面图标跟windows系统一样,只是个快捷方式,在/usr/share/applications/目录下面有应用程序的启动图标,可以直接复制到桌面,如果这个文件夹下没有的话,可以自己新建一 ...

  5. python递归三战:Sierpinski Triangle、Tower of Hanoi、Maze Exploring

    本文已做成视频教程投稿b站(视频版相对文本版有一些改进),点击观看视频教程 本文主要通过三个实例来帮助大家理解递归(其展示动画已上传B站): 谢尔宾斯基三角形(Sierpinski Triangle) ...

  6. Linux驱动实践:带你一步一步编译内核驱动程序

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...

  7. requests_cookie登陆古诗文网。session的使用

    通过登录失败,快速找到登录接口 获取hidden隐藏域中的id的value值 # 通过登陆 然后进入到主页面 # 通过找登陆接口我们发现 登陆的时候需要的参数很多 # _VIEWSTATE: /m1O ...

  8. liunx下安装mysql(8.0.27)

    一.软件下载: 1.通过官网下载: https://dev.mysql.com/downloads/repo/yum/ 本文使用的系统为centos7,基于RedHat7的版本 2.下载完成后文件 m ...

  9. [cf878D]Magic Breeding

    对于每一行,用一个2^12个01来表示,其中这一行就是其中所有为1的点所代表的行(i二进制中包含的行)的max的min,然后就可以支持取max和min了,查询只需要枚举答案即可 1 #include& ...

  10. 论文翻译:2020_Densely connected neural network with dilated convolutions for real-time speech enhancement in the time domain

    提出了模型和损失函数 论文名称:扩展卷积密集连接神经网络用于时域实时语音增强 论文代码:https://github.com/ashutosh620/DDAEC 引用:Pandey A, Wang D ...