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集合 实现栈和队列的更多相关文章

  1. 用LinkedList集合演示栈和队列的操作

    在数据结构中,栈和队列是两种重要的线性数据结构.它们的主要不同在于:栈中存储的元素,是先进后出:队列中存储的元素是先进先出.我们接下来通过LinkedList集合来演示栈和队列的操作. import ...

  2. java 集合 Connection 栈 队列 及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  3. java集合详解(附栈,队列)

    1 集合 1.1 为什么会出现集合框架 [1] 之前的数组作为容器时,不能自动拓容 [2] 数值在进行添加和删除操作时,需要开发者自己实现添加和删除. 1.2 Collection接口 1.2.1 C ...

  4. 集合第七发练习之利用ArrayList做栈、队列

    栈:后进先出. 队列:先进先出. 利用这个核心思想,结合集合的add和remove方法做的栈和队列如下代码所示: 主类(t1()和t2()分别演栈和队列):   package cn.hncu.myS ...

  5. LinkedList学习:API调用、栈、队列实现

    参考的博客 Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例 如果你想详细的区了解容器知识以及本文讲的LinkedList,我推荐你去看这篇博客和这个做个的容器系列 Lin ...

  6. Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析

    重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...

  7. 集合类——集合输出、栈和队列及Collections集合

    1.集合输出 在之前我们利用了toString()及get()方法对集合进行了输出,其实那都不是集合的标准输出,集合输出有四种方式:Iterator.ListIterator.Enumeration. ...

  8. Java:基于LinkedList实现栈和队列

    1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit; import java.util. ...

  9. 采用LinkedList来模拟栈数据结构的集合--先进后出

    三.用LinkedList来模拟栈数据结构的集合 /* * 自定义一个数据结构为LinkedList的集合类*/public class MyCollection_LinkedList { publi ...

随机推荐

  1. 获取linux性能数据

    import reimport osimport sysimport jsonimport socketfrom urllib import request,parseimport urllibfro ...

  2. 【笔记篇】斜率优化dp(五) USACO08MAR土地购(征)买(用)Land Acquisition

    好好的题目连个名字都不统一.. 看到这种最大最小的就先排个序嘛= =以x为第一关键字, y为第二关键字排序. 然后有一些\(x_i<=x_{i+1},且y_i<=y_{i+1}\)的土地就 ...

  3. RAKsmart新出香港服务器的优势

    RAKsmart为了更好地服务用户,所以最近RAKsmart新推出得香港服务器又带给了用户更多的选择,那这次RAKsmart新推出香港服务器有哪些优势呢? 1.带宽更大可升至10Mpbs 香港服务器的 ...

  4. 最大流dicnic——hdu1532模板题

    #include<bits/stdc++.h> using namespace std; #define maxn 1005 #define ll long long const ll i ...

  5. duilib教程之duilib入门简明教程10.界面设计器 DuiDesigner

    上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的话,非常的不直观,也很不方便.    所以这一章准备介绍duilib的UI设计器,由于这个设计器很不完善,也 ...

  6. 372 在O(1)时间复杂度删除链表节点

    原题网址:http://www.lintcode.com/zh-cn/problem/delete-node-in-the-middle-of-singly-linked-list/ 给定一个单链表中 ...

  7. Astyle 快速入门,常用指令

    --style=java -n -p -c !E astyle是一个命令行工具,命令语法很简单:          astyle [options] < original > Beauti ...

  8. PCA降维的前世今生

    PCA降维的数学原理 PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分 ...

  9. Dubbo Ecosystem - 从微服务框架到微服务生态

    从微服务框架到微服务生态,这是微服务发展的必然趋势,也是Dubbo社区满足开发者更高效的构建微服务体系期望的使命和担当. 近期,Apache Dubbo PPMC 望陶(社区昵称:ralf0131)做 ...

  10. 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\)是数组中和 ...