30分钟掌握-算法(用链表实现队列)演示
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了30分钟掌握-算法(用链表实现队列)演示相关的知识,希望对你有一定的参考价值。
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
30分钟掌握-算法(用链表实现队列)演示
01 什么是队列?
栈就像日常排队买东西的人的队列,排到前面的人先买,排在后面的人后买(FIFO),即先进先出,后进后出。
02 队列的结构图
03 实战
废话不多说,放我的练习demo源码,运行走起来(只供参考哈,上面注释写的蛮全的):
package com.yzy.demo.javatest.link;
/**
* 有头结点链表实现模板
* @author yangzhenyu
* */
public class LNode<T> {
public T data;
public LNode<T> next;
}
package com.yzy.demo.javatest.queue;
import com.yzy.demo.javatest.link.LNode;
/**
* 链表的方式设计队列的实现
* 先进先出、后进后出
* */
public class MyQueue<T> {
//头部结点
LNode<T> head = new LNode();
//当前结点
LNode<T> cur = new LNode();
//队尾结点
LNode<T> end = new LNode<>();
public MyQueue(){
//头部结点初始化
cur = head;
}
/**
* 判断栈是否为空
* */
public boolean empty(){
return head.next == null;
}
/**
* 查看队列中的元素数量
* */
public int size(){
int i = 0;
LNode<T> tmp = head.next;
while (tmp != null){
tmp = tmp.next;
i++;
}
return i;
}
/**
* 入队列 链表新增 (引用对象的方式来建立联系)
* */
public void push(T t){
//栈实现
LNode<T> tmp = new LNode();
tmp.data = t;
//链表 引用设计
cur.next = tmp;
cur = tmp;
end.data = t;
}
/**
* 出队列, 链表删除头部结点+1位置结点
* 链表删除原理:前驱结点.next = 后继结点
* */
public T pop(){
LNode<T> tmp = head.next;
if (tmp!=null){
head.next = tmp.next;
System.out.println("出队列:"+tmp.data);
return tmp.data;
}
System.out.println("队列已经空了");
return null;
}
/**
* 不出队列,取得队头元素
* */
public T top(){
if (head.next!= null){
return head.next.data;
}
System.out.println("队列已经空了");
return null;
}
/**
* 不出队列,取得队尾元素
* */
public T end(){
if (end.data!= null){
return end.data;
}
System.out.println("队列已经空了");
return null;
}
/**
* 测试
* */
public static void main(String[] args) {
MyQueue<Integer> myQueue = new MyQueue<>();
boolean flag = true;
//入队列
System.out.println("开始入队列==============>>>>");
for (int i=0;i<=10;i++){
//偶数入队列
if (i%2==0){
System.out.println("入队列:"+i);
myQueue.push(i);
}
}
//获取队列内总数
System.out.println("获取队列内总数:"+ myQueue.size());
//判断队列是否为空
System.out.println("判断队列是否为空:"+ myQueue.empty());
//查询队头数据
System.out.println("查询队头数据:"+myQueue.top());
//查询队尾数据
System.out.println("查询队尾数据:"+myQueue.end());
//出队列
while (flag){
boolean index = myQueue.pop() == null?true:false;
if (index){
flag = false;
}
}
//获取队列内总数
System.out.println("获取队列内总数:"+ myQueue.size());
//判断队列是否为空
System.out.println("判断队列是否为空:"+ myQueue.empty());
}
}
运行:
以上是关于30分钟掌握-算法(用链表实现队列)演示的主要内容,如果未能解决你的问题,请参考以下文章