Java基于链表实现栈的方法详解
作者:WFaceBoss 时间:2022-07-02 11:39:20
本文实例讲述了Java基于链表实现栈的方法。分享给大家供大家参考,具体如下:
在上几小节中我们实现了基本的链表结构,并在上一节的底部给出了有关链表的源码,此处在贴一次吧,猛戳
在开始栈的实现之前,我们再来看看关于链表的只在头部进行的增加、删除、查找操作,时间复杂度均为O(1),基于链表的这几个优势,我们在此基础上实现栈。
前言,在写本小节之前,我们已经实现了一个基于静态数组的栈,转到查看。此处我们实现基于链表的栈。
1.链表类拷贝到Stack 包下:
在实现基于静态数组的栈的时候,我们已经新建了一个package,此时我们将已经实现的链表类拷贝到该package下,目录结构为:
2.实现栈
新建一个LinkedListStack类,实现Stack接口,相关代码如下:
Stack接口:
package Stack;
public interface Stack<E> {
//栈中元素个数
int getSize();
//栈中元素个数是否为空
boolean isEmpty();
//进栈
void push(E e);
//出栈
E pop();
//查看栈顶元素
E peek();
}
个LinkedListStack类:
package Stack;
public class LinkedListStack<E> implements Stack<E> {
private LinkedList<E> list;
public LinkedListStack() {
list = new LinkedList<E>();
}
//栈中元素个数
@Override
public int getSize() {
return list.getSize();
}
//栈中是否为空
@Override
public boolean isEmpty() {
return list.isEmpty();
}
//在栈中添加元素
@Override
public void push(E e) {
list.addFirst(e);
}
//从栈中删除第一个元素
@Override
public E pop() {
return list.removeFirst();
}
//查看栈中第一个元素
@Override
public E peek() {
return list.getFirst();
}
//主要是便于输出给对象信息
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: top ");
res.append(list);
return res.toString();
}
}
3.添加测试代码
为了测试的简单,我们在已经实现了Stack接口的LinkedListStack类中建立以main()方法,main中代码如下:
//测试
public static void main(String[] args) {
LinkedListStack<Integer> stack = new LinkedListStack<Integer>();
for (int i = 0; i < 5; i++) {
stack.push(i);
System.out.println(stack);
}
System.out.println("出栈一个元素:");
stack.pop();
System.out.println(stack);
}
结果为:
到此我们实现了底层是链表的栈。
关于本小节,若您觉得还行、还过得去,记得给个推荐哦~,谢谢!!
本节源码 https://github.com/FelixBin/dataStructure/blob/master/src/Stack/LinkedListStack.java
希望本文所述对大家java程序设计有所帮助。
来源:https://www.cnblogs.com/wfaceboss/p/10643690.html
标签:Java,链表,栈
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java 使用poi把数据库中数据导入Excel的解决方法
2022-09-19 14:18:52
![](https://img.aspxhome.com/file/2023/0/62840_0s.png)
springboot 定时任务@Scheduled实现解析
2023-11-10 16:18:24
java多次嵌套循环查询数据库导致代码中数据处理慢的解决
2023-10-28 22:17:50
利用Java计算某个日期是星期几
2023-11-17 05:49:42
详解Java中对象池的介绍与使用
2023-07-25 13:13:48
Java解析调用webservice服务的返回XML串详解
2023-11-07 02:42:01
java web实现邮箱激活与忘记密码
2023-11-18 09:35:26
![](https://img.aspxhome.com/file/2023/1/59491_0s.jpg)
java 读取网页内容的实例详解
2023-11-27 22:38:11
java基础的详细了解第四天
2022-11-25 07:24:51
![](https://img.aspxhome.com/file/2023/0/65350_0s.jpg)
Android TextView中文字通过SpannableString设置属性用法示例
2023-07-26 07:11:51
![](https://img.aspxhome.com/file/2023/8/84748_0s.jpg)
简单谈谈Java中的栈和堆
2022-07-30 05:33:01
![](https://img.aspxhome.com/file/2023/3/61163_0s.png)
SpringBoot Entity中枚举类型详细使用介绍
2023-11-11 00:30:52
![](https://img.aspxhome.com/file/2023/8/59218_0s.png)
Java实现显示指定类型的文件
2021-10-26 11:30:37
![](https://img.aspxhome.com/file/2023/5/62675_0s.png)
Java实现AOP面向切面编程的实例教程
2023-02-20 19:32:38
JavaFX实现简单日历效果
2023-05-16 08:43:30
![](https://img.aspxhome.com/file/2023/5/61325_0s.jpg)
Java利用MultipartFile实现上传多份文件的代码
2023-11-25 11:29:13
重新认识Java的System.in
2023-08-24 01:55:18
Java StringBuffer与StringBuilder有什么区别
2022-12-15 22:35:12
springboot创建多module项目的实例
2021-09-09 20:13:20
![](https://img.aspxhome.com/file/2023/0/63390_0s.png)
零基础写Java知乎爬虫之准备工作
2022-10-25 01:19:18