数据结构 队列以及Java代码实现
来源:互联网 发布:java 小游戏源代码 编辑:程序博客网 时间:2024/06/06 03:46
1. 队列
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
- 队尾(rear)——允许插入的一端
- 队头(front)——允许删除的一端
队列特点:先进先出(FIFO)
结构模型:
2.顺序循环队列
/** * Queue * 队列的基本操作 * (1)清空队列 * (2)判断是否为空 * (3)元素的个数 * (4)入队列 * (5)出队列 * (6)取对头元素 * Created by heqianqian on 2017/7/14. */public interface Queue<T> { /** * 判断是否为空 */ boolean isEmpty(); /** * 入队列 */ void enQueue(T obj); /** * 出队列 */ T deQueue(); /** * 取队头元素 */ T peek(); /** * 元素的个数 */ int size(); /** * 清空队列 */ void clear();}
/** * ArrayQueue * 顺序循环队列 * Created by heqianqian on 2017/7/14. */public class ArrayQueue<T> implements Queue<T> { private static final int DEFAULT_SIZE = 10; private T[] queue; private int front, rear; private int size; @SuppressWarnings("unchecked") public ArrayQueue() { front = rear = size = 0; queue = (T[]) new Object[DEFAULT_SIZE]; } @Override public boolean isEmpty() { return size == 0; } @Override public void enQueue(T obj) { if ((rear == front) && (size > 0)) {//队列已满 expand(); } //队尾插入元素 queue[rear] = obj; rear = (rear + 1) % DEFAULT_SIZE; size++; } /** * 扩容 */ @SuppressWarnings("unchecked") private void expand() { T[] arr = (T[]) new Object[DEFAULT_SIZE * 2]; System.arraycopy(queue, 0, arr, 0, size); } @Override public T deQueue() { if ((rear == front) && (size == 0)) {//队列为空 return null; } //队头取元素 T result = queue[front]; front = (front + 1) % DEFAULT_SIZE; size--; return result; } @Override public T peek() { return queue[front]; } @Override public int size() { return size; } @Override public void clear() { front = rear = size = 0; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < size - 1; i++) { sb.append(queue[i]).append(","); } sb.append(queue[size - 1]).append("]"); return sb.toString(); }}
3.链式队列
/** * Node * 链式队列的节点 * Created by heqianqian on 2017/7/14. */public class Node<T> { public Node next; public T data; public Node(T data) { this.data = data; next = null; } @Override public String toString() { return data.toString(); }}
/** * LinkedQueue * 链式循环队列 * Created by heqianqian on 2017/7/14. */public class LinkedQueue<T> implements Queue<T> { private Node<T> front, rear; private int size; @SuppressWarnings("unchecked") public LinkedQueue() { front = rear = new Node(null); size = 0; } @Override public boolean isEmpty() { return size == 0; } @Override public void enQueue(T obj) { Node<T> node = new Node<T>(obj); //队尾插入 rear.next = node; rear = node; size++; } @Override @SuppressWarnings("unchecked") public T deQueue() { //队头出队 if (size <= 0) { return null; } T data = (T) front.next.data; front = front.next; size--; return data; } @Override public T peek() { return (T) front.next.data; } @Override public int size() { return size; } @Override public void clear() { size = 0; front = rear; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); Node<T> temp = front.next; while (temp != rear) { sb.append(temp.data.toString()).append(","); temp = temp.next; } sb.append(temp.data).append("]"); return sb.toString(); }}
阅读全文
0 0
- 数据结构 队列以及Java代码实现
- 数据结构 线性表以及Java代码实现
- 数据结构 栈以及Java代码实现
- 队列数据结构Java实现
- java实现队列数据结构
- 数据结构-Java实现队列
- 数据结构队列C++代码实现
- 数据结构-链队列代码实现
- 数据结构之链表、栈和队列 java代码实现
- java数据结构,实现栈/队列
- java实现栈,队列数据结构
- java 实现数据结构之队列
- java 实现数据结构之队列
- 数据结构:循环队列--Java实现
- 数据结构之-java实现-队列
- 数据结构之队列【java实现】
- 数据结构循环队列Java实现
- 数据结构链队列java实现
- kernel的属性文件到android的java的读取(7 14)
- python编程技巧之从字典中提取子集
- 如何完全屏蔽Chrome的提示:"请停用以开发者模式运行的扩展程序"
- C++ Vector用法介绍
- JavaSE_笔试题_单选选择题1
- 数据结构 队列以及Java代码实现
- 一个Redis消息队列实现
- 泛型算法
- Redis--事务
- WeakHashMap源码分析
- Linux操作系统故障排除-centos7口令丢失
- ubuntu16.04 安装composer和 laravel
- 前端JS知识要点总结(1)
- 数据结构 栈以及Java代码实现