目录
一、队列的定义
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
用双向链表实现一个队列
二、队列方法的实现
1、定义队列
public class MyQueue{
static class ListNode {
public int val;
public ListNode next;
public ListNode prev;
public ListNode(int val) {
this.val = val;
}
}
public ListNode head;
public ListNode last;
public int UsedSize;
2、后端插入
public boolean offer(int val) {
ListNode node = new ListNode(val);
if (head == null) {
head = node;
last = node;
} else {
last.next = node;
node.prev = last;
last = node;
}
UsedSize++;
return true;
}
3、前端操作
取出头节点的值并将头节点从链表中取出:
public int pop() {
if (head == null) {
return -1;
}
int retVal = head.val;
if (head.next == null) {
return retVal;
}
head = head.next;
、
head.prev = null;
UsedSize--;
return retVal;
}
取出头节点的值但不将头节点从链表中取出:
public int peek(){
if (head==null){
return -1;
}
return head.val;
}
4、判断队列是否为空
public boolean empty(){
return head==null;
}
5、队列大小
public int size(){
return UsedSize;
}
三、队列方法的使用
定义一个Main类,对定义的方法进行使用。
public class Main {
public static void main(String[] args) {
MyQueue myQueue=new MyQueue();
myQueue.offer(1);
myQueue.offer(2);
myQueue.offer(3);
myQueue.offer(4);
myQueue.offer(5);
myQueue.offer(6);
System.out.println(myQueue.pop());
System.out.println(myQueue.peek());
System.out.println(myQueue.empty());
System.out.println(myQueue.size());
}
}
执行结果:
1
2
false
5
以上就是对队列的简单实现
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » MyQueue(队列)
发表评论 取消回复