LinkedList集合 实现栈和队列
LinkedList集合的底层是链表结构实现的,所以可以模拟栈(先进后出)和队列(先进先出)。
方法:
addFirst() //添加元素到列表的起始位置
addLast() //添加元素到列表的结束位置
removeFirst() //移除列表起始位置的元素
removeLast() //移除列表结束位置的元素
getFirst() //获取列表起始位置的元素
getLast() //获取列表结束位置的元素
User类
package queue;
public class User {
private int id;
private String account;
private String password;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
super();
}
public User(int id, String account, String password, String name) {
super();
this.id = id;
this.account = account;
this.password = password;
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]";
}
}
构造队列的方法类
package queue; import java.util.LinkedList; /**
* LinkedList模拟队列,先进先出
*
* @author WJY
*
*/
public class Queue<T> { private LinkedList<T> linkedList = new LinkedList<T>(); /**
* 进队
*
* @param t
* 进队的元素
*/
public void enQueue(T t) {
linkedList.addLast(t);
} /**
* 出队
*
* @return 出队的元素
*/
public T deQueue() {
return linkedList.removeFirst();
} /**
* 销毁队列
*/
public void destroyQueue() {
linkedList.clear();
} /**
* 查看队首元素
*
* @return 队首的元素
*/
public T queueFirst() {
return linkedList.getFirst();
} /**
* 查看队尾元素
*
* @return 队尾的元素
*/
public T queueLast() {
return linkedList.getLast();
} /**
* 查看队列长度
*
* @return 队列的长度
*/
public int queueLength() {
return linkedList.size();
} /**
* 判断队列是否为空
*
* @return 队列为空 true 队列不为空 false
*/
public boolean isEmpty() {
return linkedList.isEmpty();
} /**
* 打印队列
*/
public String toString() {
return linkedList.toString();
} }
测试队列类
package queue;
import list.User;
public class Test {
public static void main(String[] args) {
User user1 = new User(1, "账号1", "密码1", "姓名1");
User user2 = new User(2, "账号2", "密码2", "姓名2");
User user3 = new User(3, "账号3", "密码3", "姓名3");
User user4 = new User(4, "账号4", "密码4", "姓名4");
User user5 = new User(5, "账号5", "密码5", "姓名5");
Queue<User> queue = new Queue<User>();
queue.enQueue(user1);
queue.enQueue(user2);
queue.enQueue(user3);
queue.enQueue(user4);
queue.enQueue(user5);// 进队
System.out.println("队首元素:" + queue.queueFirst());
System.out.println("队尾元素:" + queue.queueLast());
System.out.println("队列长度:" + queue.queueLength());
System.out.println("队列是否为空:" + queue.isEmpty());
System.out.println(queue.toString());// 打印队列
queue.deQueue();
queue.deQueue();
queue.deQueue();// 出队
System.out.println("队首元素:" + queue.queueFirst());
System.out.println("队尾元素:" + queue.queueLast());
System.out.println("队列长度:" + queue.queueLength());
System.out.println("队列是否为空:" + queue.isEmpty());
System.out.println(queue.toString());// 打印队列
queue.destroyQueue();// 销毁队列
System.out.println("队列长度:" + queue.queueLength());
System.out.println("队列是否为空:" + queue.isEmpty());
System.out.println(queue.toString());// 打印队列
}
}
测试结果:
队首元素:User [id=1, account=账号1, password=密码1, name=姓名1]
队尾元素:User [id=5, account=账号5, password=密码5, name=姓名5]
队列长度:5
队列是否为空:false
[User [id=1, account=账号1, password=密码1, name=姓名1], User [id=2, account=账号2, password=密码2, name=姓名2], User [id=3, account=账号3, password=密码3, name=姓名3], User [id=4, account=账号4, password=密码4, name=姓名4], User [id=5, account=账号5, password=密码5, name=姓名5]]
队首元素:User [id=4, account=账号4, password=密码4, name=姓名4]
队尾元素:User [id=5, account=账号5, password=密码5, name=姓名5]
队列长度:2
队列是否为空:false
[User [id=4, account=账号4, password=密码4, name=姓名4], User [id=5, account=账号5, password=密码5, name=姓名5]]
队列长度:0
队列是否为空:true
[]
User类
package stack;
public class User {
private int id;
private String account;
private String password;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
super();
}
public User(int id, String account, String password, String name) {
super();
this.id = id;
this.account = account;
this.password = password;
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]";
}
}
构造栈的方法类
package stack; import java.util.LinkedList; /**
* LinkedList模拟栈,先进后出
*
* @author WJY
*
*/
public class Stack<T> { private LinkedList<T> linkedList = new LinkedList<T>(); /**
* 进栈
*
* @param t
* 进栈的元素
*/
public void push(T t) {
linkedList.addFirst(t);
} /**
* 出栈
*
* @return 出栈的元素
*/
public T pop() {
return linkedList.removeFirst();
} /**
* 销毁栈
*/
public void destroyStack() {
linkedList.clear();
} /**
* 查看栈顶元素
*
* @return 栈顶的元素
*/
public T stackFirst() {
return linkedList.getFirst();
} /**
* 查看栈底元素
*
* @return 栈底的元素
*/
public T stackLast() {
return linkedList.getLast();
} /**
* 查看栈长度
*
* @return 栈的长度
*/
public int stackLength() {
return linkedList.size();
} /**
* 判断栈是否为空
*
* @return 栈为空 true 栈不为空 false
*/
public boolean isEmpty() {
return linkedList.isEmpty();
} /**
* 打印栈
*/
public String toString() {
return linkedList.toString();
} }
测试栈类
package stack;
import list.User;
public class Test {
public static void main(String[] args) {
User user1 = new User(1, "账号1", "密码1", "姓名1");
User user2 = new User(2, "账号2", "密码2", "姓名2");
User user3 = new User(3, "账号3", "密码3", "姓名3");
User user4 = new User(4, "账号4", "密码4", "姓名4");
User user5 = new User(5, "账号5", "密码5", "姓名5");
Stack<User> stack = new Stack<User>();
stack.push(user1);
stack.push(user2);
stack.push(user3);
stack.push(user4);
stack.push(user5);// 进栈
System.out.println("栈顶元素:" + stack.stackFirst());
System.out.println("栈底元素:" + stack.stackLast());
System.out.println("栈长度:" + stack.stackLength());
System.out.println("栈是否为空:" + stack.isEmpty());
System.out.println(stack.toString());// 打印栈
stack.pop();
stack.pop();
stack.pop();// 出栈
System.out.println("栈顶元素:" + stack.stackFirst());
System.out.println("栈底元素:" + stack.stackLast());
System.out.println("栈长度:" + stack.stackLength());
System.out.println("栈是否为空:" + stack.isEmpty());
System.out.println(stack.toString());// 打印栈
stack.destroyStack();// 销毁栈
System.out.println("栈长度:" + stack.stackLength());
System.out.println("栈是否为空:" + stack.isEmpty());
System.out.println(stack.toString());// 打印栈
}
}
测试结果:
栈顶元素:User [id=5, account=账号5, password=密码5, name=姓名5]
栈底元素:User [id=1, account=账号1, password=密码1, name=姓名1]
栈长度:5
栈是否为空:false
[User [id=5, account=账号5, password=密码5, name=姓名5], User [id=4, account=账号4, password=密码4, name=姓名4], User [id=3, account=账号3, password=密码3, name=姓名3], User [id=2, account=账号2, password=密码2, name=姓名2], User [id=1, account=账号1, password=密码1, name=姓名1]]
栈顶元素:User [id=2, account=账号2, password=密码2, name=姓名2]
栈底元素:User [id=1, account=账号1, password=密码1, name=姓名1]
栈长度:2
栈是否为空:false
[User [id=2, account=账号2, password=密码2, name=姓名2], User [id=1, account=账号1, password=密码1, name=姓名1]]
栈长度:0
栈是否为空:true
[]
LinkedList集合 实现栈和队列的更多相关文章
- 用LinkedList集合演示栈和队列的操作
在数据结构中,栈和队列是两种重要的线性数据结构.它们的主要不同在于:栈中存储的元素,是先进后出:队列中存储的元素是先进先出.我们接下来通过LinkedList集合来演示栈和队列的操作. import ...
- java 集合 Connection 栈 队列 及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- java集合详解(附栈,队列)
1 集合 1.1 为什么会出现集合框架 [1] 之前的数组作为容器时,不能自动拓容 [2] 数值在进行添加和删除操作时,需要开发者自己实现添加和删除. 1.2 Collection接口 1.2.1 C ...
- 集合第七发练习之利用ArrayList做栈、队列
栈:后进先出. 队列:先进先出. 利用这个核心思想,结合集合的add和remove方法做的栈和队列如下代码所示: 主类(t1()和t2()分别演栈和队列): package cn.hncu.myS ...
- LinkedList学习:API调用、栈、队列实现
参考的博客 Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例 如果你想详细的区了解容器知识以及本文讲的LinkedList,我推荐你去看这篇博客和这个做个的容器系列 Lin ...
- Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析
重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...
- 集合类——集合输出、栈和队列及Collections集合
1.集合输出 在之前我们利用了toString()及get()方法对集合进行了输出,其实那都不是集合的标准输出,集合输出有四种方式:Iterator.ListIterator.Enumeration. ...
- Java:基于LinkedList实现栈和队列
1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit; import java.util. ...
- 采用LinkedList来模拟栈数据结构的集合--先进后出
三.用LinkedList来模拟栈数据结构的集合 /* * 自定义一个数据结构为LinkedList的集合类*/public class MyCollection_LinkedList { publi ...
随机推荐
- 获取linux性能数据
import reimport osimport sysimport jsonimport socketfrom urllib import request,parseimport urllibfro ...
- 【笔记篇】斜率优化dp(五) USACO08MAR土地购(征)买(用)Land Acquisition
好好的题目连个名字都不统一.. 看到这种最大最小的就先排个序嘛= =以x为第一关键字, y为第二关键字排序. 然后有一些\(x_i<=x_{i+1},且y_i<=y_{i+1}\)的土地就 ...
- RAKsmart新出香港服务器的优势
RAKsmart为了更好地服务用户,所以最近RAKsmart新推出得香港服务器又带给了用户更多的选择,那这次RAKsmart新推出香港服务器有哪些优势呢? 1.带宽更大可升至10Mpbs 香港服务器的 ...
- 最大流dicnic——hdu1532模板题
#include<bits/stdc++.h> using namespace std; #define maxn 1005 #define ll long long const ll i ...
- duilib教程之duilib入门简明教程10.界面设计器 DuiDesigner
上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的话,非常的不直观,也很不方便. 所以这一章准备介绍duilib的UI设计器,由于这个设计器很不完善,也 ...
- 372 在O(1)时间复杂度删除链表节点
原题网址:http://www.lintcode.com/zh-cn/problem/delete-node-in-the-middle-of-singly-linked-list/ 给定一个单链表中 ...
- Astyle 快速入门,常用指令
--style=java -n -p -c !E astyle是一个命令行工具,命令语法很简单: astyle [options] < original > Beauti ...
- PCA降维的前世今生
PCA降维的数学原理 PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分 ...
- Dubbo Ecosystem - 从微服务框架到微服务生态
从微服务框架到微服务生态,这是微服务发展的必然趋势,也是Dubbo社区满足开发者更高效的构建微服务体系期望的使命和担当. 近期,Apache Dubbo PPMC 望陶(社区昵称:ralf0131)做 ...
- E. Present for Vitalik the Philatelist 反演+容斥
题意:给n个数\(a_i\),求选一个数x和一个集合S不重合,gcd(S)!=1,gcd(S,x)==1的方案数. 题解:\(ans=\sum_{i=2}^nf_ig_i\),\(f_i\)是数组中和 ...