数据结构--队列
来源:互联网 发布:linux单用户模式怎么进 编辑:程序博客网 时间:2024/06/05 11:17
1 队列是只允许在一段进行插入操作,在另外一端进行删除操作的线性表。
1.1顺序存储结构。约定front指针指向头元素的前一个元素,rear指向队尾元素。
public class QueueCustom<E> { /** * 队列最大节点数 */ private static final Integer MAX_SIZE = 100; /** * 存储数据域 */ private Object[] data; /** * 指向队头元素的前一个元素 */ private Integer front; /** * 指向队尾元素 */ private Integer rear; /** * */ public QueueCustom() { front = -1; rear = -1; data = new Object[MAX_SIZE]; } /** * 入列操作 * * @param x */ public void EnQueue(E x) { if ((rear + 1) % MAX_SIZE == front) { System.out.println("队列已满"); } else { rear = (rear + 1) % MAX_SIZE; data[rear] = x; } } /** * 出列 * * @return 出列的数据域 */ @SuppressWarnings("unchecked") public E DeQueue() { if (rear != front) { front = (front + 1) % MAX_SIZE; return (E) data[front]; } else { return null;// 队列为空 } } /** * 获取出列的数据域,不移动尾指针域 * * @return 出列的数据域 */ @SuppressWarnings("unchecked") public E getTopQueue() { if (rear != front) { int temp; temp = (front + 1) % MAX_SIZE; return (E) data[temp]; } else { return null; } } /** * 判断是否为空 * * @return 为空返回true,不为空返回false */ public boolean isEmpty() { if (rear == front) { return true; } else { return false; } } public static void main(String[] args) { QueueCustom sb = new QueueCustom(); sb.EnQueue(1); sb.EnQueue(2); sb.EnQueue(3); sb.EnQueue(4); sb.EnQueue(5); System.out.println(sb.DeQueue()); System.out.println(sb.DeQueue()); System.out.println(sb.DeQueue()); System.out.println(sb.DeQueue()); System.out.println(sb.DeQueue()); }}
1.2 链接存储结构
定义节点结构与单链表类似,一个数据域,一个指向下一个节点的指针。
public class QueueLinkCustom<E> { /** * 头节点 */ private Node<E> headNode = null; /** * 指向队头的指针, front指向一个固定的头节点 */ private Node<E> front; /** * 指向队尾的指针 */ private Node<E> rear; /** * 各个节点结构 数据域和一个指向下一个节点的指针 */ private class Node<E> { private E data; /** * 指向下一个节点 */ private Node<E> next; public Node(E data, Node<E> next) { this.data = data; this.next = next; } } public QueueLinkCustom() { headNode = new Node<E>(null, null); rear = front = headNode; } /** * 入队操作 * * @param x * 入队的数据域 */ public void EnQueue(E e) { Node<E> s = new Node<E>(e, null); rear.next = s; rear = s; } /** * 出队操作 * * @return 出列节点的数据域 */ public E DeQueue() { E nodeData = front.next.data;// front指向一个固定的头节点 front.next = front.next.next; return nodeData; } /** * * @return */ public E getTop() { return front.data; } /** * 判断队列是否为空, * * @return 为空返回true ,不为空返回false */ public boolean isEmpty() { return front == rear; } public static void main(String[] args) { // TODO Auto-generated method stub QueueLink sb = new QueueLink(); sb.EnQueue(1); sb.EnQueue(2); sb.EnQueue(3); System.out.println(sb.DeQueue()); System.out.println(sb.DeQueue()); System.out.println(sb.DeQueue()); }}
阅读全文
0 0
- 数据结构---队列
- 数据结构--队列
- 数据结构队列
- 数据结构---队列
- 数据结构(队列)
- 数据结构-队列
- 数据结构---->队列
- 数据结构---队列
- 【数据结构】队列
- 数据结构--队列
- 【数据结构】 队列
- 数据结构 -- 队列
- 数据结构--队列
- 数据结构:队列
- 数据结构 队列
- 数据结构----队列
- 数据结构----队列
- 数据结构-队列
- Java并发编程CyclicBarrier的使用
- linux中scp命令使用技巧详解(传输速度)
- 将Eclipse所有的设置都设置为UTF-8格式,以方便开发使用。
- BZOJ 1968 约数研究
- mysql将一个表的字段更新到另一个表中
- 数据结构--队列
- DatePickerDialog时间选择器+MVPPlugin开发插件的使用
- Android的数据存储与访问:一个商品展示
- sleep
- android activity跳转时黑屏解决方案
- java多客户端TCP连接应用
- 递归与分策略之合并排序
- 极大似然估计
- Ajax发送和获取json数据到Spring mvc