发布网友 发布时间:2022-04-25 02:00
共2个回答
懂视网 时间:2022-04-06 14:10
队列有3种实现方式,实现方式为:
1、基于链表来实现队列:
首先添加一个节点类,作为队列中的节点元素
public class Node {//链表中的一个节点 Node next = null; int data; //构造函数,用于添加链表时候使用 public Node(int d) { this.data = d; }; }
再新建一个类作为我们的队列,在该类中实现队列的入队和出队以及求队列的长度和判断队列是否为空等方法
①入队操作:
首先通过函数参数传入要入队的数据,根据传入的参数,新增一个节点Node,在入队方法中判断该队列是否为空,若该队列为空(head==tail),则该入队的节点既是队头也是队尾。若队列不为空,则将尾节点tail的next指针指向该元素,然后将tail节点指向该节点。
public void put(Integer data) { Node newNode = new Node(data);//构造一个新节点 if(head == null && tail == null) {//队列为空 head = newNode; tail = newNode; }else { tail.next = newNode; tail = newNode; } }
②出队操作:
若队列为空,则返回空。若队列不为空,则返回该队列的头结点,然后将头结点的下一个元素重新作为头节点
public Integer pop() { if(this.isEmpty()) { return null; } int data = head.data; head = head.next; return data; }
③判断队列空和对列长度很简单,直接贴代码,不再多说。
public int size() { int count = 0; Node tmp = head; while(tmp != null) { count++; tmp = tmp.next; } return count; }
④详细代码实现:
package com.wp.datastruct; /** * 利用链表来实现队列 * */ public class MyQueue<E> { Node head = null;//队列头 Node tail = null;//队列尾 /** * 入队操作: * 若该队列尾空,则入队节点既是头结点也是尾节点 * 若队列不为空,则先用tail节点的next指针指向该节点 * 然后将tail节点指向该节点 * */ public void put(Integer data) { Node newNode = new Node(data);//构造一个新节点 if(head == null && tail == null) {//队列为空 head = newNode; tail = newNode; }else { tail.next = newNode; tail = newNode; } } /** * 判断队列是否为空:当头结点等于尾节点的时候该队列就为空 * */ public boolean isEmpty() { return head == tail; } /** * 出队操作: * 若队列为空,则返回null * 否则,返回队列的头结点,并将head节点指向下一个 * */ public Integer pop() { if(this.isEmpty()) { return null; } int data = head.data; head = head.next; return data; } public int size() { int count = 0; Node tmp = head; while(tmp != null) { count++; tmp = tmp.next; } return count; } }
2、使用linkedList
来实现队列
该方法是使用java中的linkedList集合来实现一个队列,通过调用linkedList中的方法来实现队列的入队出队,判空等操作
首先new一个类来作为我们的队列,该类中包含两个属性,一个是size:用来统计该队列的长度,另一个是LinkedList对象,
代表我们的队列。
private LinkedList<E> list = new LinkedList<>(); private int size = 0;//用于统计队列的长度
①入队操作:
应为linkedList集合中已经实现好了添加删除操作,在这里我们只需要简单的调用方法就可以实现队列的相关操作了,非常简单而且容易理解。
public synchronized void put(E data) {//保证线程安全,实现同步操作 list.add(data); size++; }
②出队操作:
public synchronized E pop() { size--; return list.removeFirst();//从头取出 }
③详细代码:
public class MyQueue2<E> { private LinkedList<E> list = new LinkedList<>(); private int size = 0;//用于统计队列的长度 public synchronized void put(E data) {//保证线程安全,实现同步操作 list.add(data); size++; } public synchronized E pop() { size--; return list.removeFirst();//从头取出 } public synchronized int size() { return size; } public boolean isEmpty() { return size == 0; } }
3、使用两个栈来实现一个队列。
也可以使用两个实现好的栈来实现一个队列(这个问题可能面试笔试的时候回被问到)。
实现方法是:
创建两个栈s1,s2。入队的时候就只压栈到s1中。
出队分两种情况:1.当s2不为空的使用,就弹出栈顶元素作为出队元素。
2.当s2等于空,则先将s1中的元素全部弹出到s2中,再从s2中弹出栈顶元素作为出队元素。
①入队:
public synchronized void put(E data) {//使用同步处理,保证线程安全 s1.push(data); }
②出队:
public synchronized E pop() { if(!s2.isEmpty()) { return s2.pop(); }else { s2.push(s1.pop()); return s2.pop(); } }
③.详细代码实现:
package com.wp.datastruct; import java.util.Stack; /** * 利用两个栈来模拟队列操作 * 入队操作就只是想栈s1中添加, * 出栈操作分为两部分: * 1.当s2中不为空的时候,就直接弹出s2中的栈顶数据 * 2.当s2中为空的时候,就先把s1中的数据全部弹出到s2中然后将栈顶数据出栈 * * */ public class MyQueue3<E> { Stack<E> s1 = new Stack<>(); Stack<E> s2 = new Stack<>(); public synchronized void put(E data) {//使用同步处理,保证线程安全 s1.push(data); } public synchronized E pop() { if(!s2.isEmpty()) { return s2.pop(); }else { s2.push(s1.pop()); return s2.pop(); } } public synchronized boolean isEmpty() { return s1.isEmpty() && s2.empty(); } }
推荐教程:《php视频教程》
热心网友 时间:2022-04-06 11:18
队列有三种类型:
1、前瞻性队列研究
前瞻性队列研究是队列研究的基本形式。研究对象的分组是根据研究对象现时的暴露状况而定的,此时研究的结局还没有出现,需前瞻观察一段时间才能得到。
2、历史性队列研究
研究对象的分组是根据研究开始时研究者已掌握的有关研究对象在过去某个时点的暴露状况的历史资料作出的。
3、双向性队列研究
也称混合性队列研究,即在历史性队列研究的基础上,继续前瞻性观察一段时间,它是将前瞻性队列研究与历史性队列研究结合起来的一种模式。
优点:
1、资料可靠,一般不存在回忆偏倚。
2、可直接获得暴露组和对照组人群的发病或死亡率,可直接计算RR、AR等反映疾病危险强度的指标。
3、由于病因在前,疾病在后,因此检验假设的能力较强,一般可证实病因联系。
4、有助于了解疾病的自然史,有时还可能获得多种预期以外的疾病结局资料,可分析一因多种疾病的关系。
缺点:
1、不适于发病率低疾病的病因研究。
2、容易产生失访偏倚。
3、研究耗费人财物和时间较多。
4、在随访过程中,未知变量引入人群,或人群中已知变量的变化等,都可是结局受到影响,使分析复杂化。
扩展资料:
1、队列研究的基本原理:
队列研究的基本原理是在一个特定人群中选择所需的研究对象,根据目前或过去某个时期是否暴露于某个待研究的危险因素,或其不同的暴露水平而将研究对象分成不同的组。
如暴露组和非暴露组,高剂量暴露组和低剂量暴露组等,随访观察一段时间,检查并登记各组人群待研究的预期结局的发生情况,比较各组结局的发生率,从而评价和检验危险因素与结局的关系。
2、队列研究的基本特点:
属于观察法;设立对照组;由因到果;能确证暴露与结局的因果关系。
参考资料:百度百科-队列研究