数据结构和算法(2)-----队列

2023-11-06

一、基本介绍

  • 队列是一个有序列表,可以用数组链表来实现
  • 遵循先入先出的原则,即先存入队列的数据,要先取出;后存入队列的数据,要后取出
  • 示意图:

二、数组模拟队列

思路:

  • 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量。

  • 因为队列的输出,输入是分别从队头和队尾来处理,因此需要两个变量front和rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。
  • 我们将数据存入队列时称为addQueue,addQueue的处理需要有两个步骤,分别是:将尾指针往后移,rear+1;若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据。
  • 队列初始:front和rear均为-1,front指向队头的前一个元素,rear指向队尾元素
  • 队列为空:front==rear
  • 队列为满:rear==maxSize-1

代码实现:

package com.atguigu.queue;

public class ArrayQueue {
	private int maxSize;
	private int front;
	private int rear;
	private int [] arr;
	
	//构造函数,初始化队列
	public ArrayQueue(int maxSize) {
		this.maxSize = maxSize;
		arr=new int [this.maxSize];
		front=-1;
		rear=-1;
	}
	
	
	//判断队列是否为满
	public boolean isFull(){
		if(rear==maxSize-1){
			return true;
		}else{
			return false;
		}
	}
	
	
	//判断队列是否为空
	public boolean isEmpty(){
		if(front==rear){
			return true;
		}else{
			return false;
		}
	}
	
	
	//入队
	public void addQueue(int n){
		if(this.isFull()==false){
			rear++;
			arr[rear]=n;
		}else{
			System.out.println("队列已满");
		}
	}
	
	
	//出队
	public int getQueue(){
		if(this.isEmpty()==false){
			front++;
			return arr[front];
		}else{
			throw new RuntimeException("队列为空");
		}
	}
	
	
	//打印队列内容
	public void showQueue(){
		if(this.isEmpty()){
			System.out.println("队列为空");
		}else{
			System.out.print("[");
			for(int i=front+1;i<=rear;i++){
				if(i!=rear){
					System.out.print(arr[i]+",");
				}else{
					System.out.print(arr[i]);
				}
			}
			System.out.print("]");
			System.out.println();
		}
	}
	
	
	//获取队头元素
	public int headQueue(){
		if(this.isEmpty()==true){
			throw new RuntimeException("队列为空");
		}else{
			return arr[front+1];
		}
	}
}

测试代码:

package com.atguigu.queue;

public class ArrayQueueDemo {
	public static void main(String[] args) {
		ArrayQueue arrayQueue=new ArrayQueue(5);
		
		arrayQueue.showQueue();
		
		System.out.println("-------------------------------------------------");
		arrayQueue.addQueue(34);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue.addQueue(45);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue.addQueue(65);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue.addQueue(86);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue.addQueue(93);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue.addQueue(37);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp1=arrayQueue.getQueue();
		System.out.println("取出的元素是:"+temp1);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp2=arrayQueue.getQueue();
		System.out.println("取出的元素是:"+temp2);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp3=arrayQueue.getQueue();
		System.out.println("取出的元素是:"+temp3);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp4=arrayQueue.getQueue();
		System.out.println("取出的元素是:"+temp4);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue.addQueue(100);
		System.out.print("队列的元素:");
		arrayQueue.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue.headQueue());

	}

}

效果图:

问题分析:

  • 目前数组使用一次就不能继续使用了,没有达到复用的效果
  • 将这个数组使用算法,改进成一个环形的队列(取模)

三、数组模拟环形队列

思路:

对前面的数组模拟队列的优化,充分利用数组,因此将数组看做是一个环形的(通过取模的方式来实现)

在环形队列中,如图b所示,队列为满,则front==rear;如图c所示,队列为空时,则front==rear。因此无法判断队列为满或为空,处理方法:少用一个元素空间,约定以“队列头指针在队尾指针的下一位置(值环形的下一个位置)上”作为队满的标志

分析:

  • front变量的含义做一个调整:front指向队列的第一个元素,也就是arr[front]就是队列的第一个元素,front的初始值为0
  • rear变量的含义做一个调整:rear指向队列的最后一个元素的后一个位置,因为希望它空出一个空间作为约定,rear的初始值为0
  • 队列为满:(rear+1)%maxSize==front
  • 队列为空:rear==front
  • 队列中元素的个数(对长):(rear-front+maxSize)%maxSize

代码实现:

package com.atguigu.queue;

public class ArrayQueue1 {
	private int maxSize;
	private int front;
	private int rear;
	private int [] arr;
	
	
	//构造函数,初始化队列
	public ArrayQueue1(int maxSize) {
		this.maxSize = maxSize;
		arr=new int [this.maxSize];
		front=0;
		rear=0;
	}
	
	//判断队列是否已满
	public boolean isFull(){
		if((this.rear+1)%this.maxSize==front){
			return true;
		}else{
			return false;
		}
	}
	
	
	//判断队列是否为空
	public boolean isEmpty(){
		if(this.rear==this.front){
			return true;
		}else{
			return false;
		}
	}
	
	
	//入队
	public void addQueue(int n){
		if(this.isFull()){
			System.out.println("队列已满,不可添加元素");
		}else{
			arr[rear]=n;
			rear=(rear+1)%this.maxSize;    //将rear后移一位,这里必须考虑环形队列(取模)
		}
	}
	
	
	//出队
	public int getQueue(){
		if(this.isEmpty()){
			throw new RuntimeException("队列为空,不可取出元素");
		}else{
			int temp=arr[front];                    //1.先把front对应的值保存到一个临时变量
			front=(front+1)%maxSize;         //2.将front后移一位
			return temp;                                 //3.将临时变量返回
		}
	}
	
	
	
	//获取队列长度
	public int getLength(){
		return (rear-front+maxSize)%maxSize;
	}
	
	
	//打印队列元素
	public void showQueue(){
		if(this.isEmpty()){
			System.out.println("队列为空,无法显示队列");
		}else{
			System.out.print("[");
			for(int i=front;i<(this.getLength()+this.front);i++){
				if(i!=(this.getLength()+this.front-1)){
					System.out.print(arr[i%this.maxSize]+",");
				}else{
					System.out.print(arr[i%this.maxSize]);
				}
			}
			System.out.println("]");
		}
	}
	
	
	//获取队头元素
	public int headQueue(){
		if(this.isEmpty()){
			throw new RuntimeException("队列为空,没有队头元素");
		}else{
			return arr[front];
		}
	}
}
package com.atguigu.queue;

public class ArrayQueueDemo1 {
	public static void main(String[] args) {
		ArrayQueue1 arrayQueue1=new ArrayQueue1(5);
		System.out.println("队列的初始长度:"+arrayQueue1.getLength());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(34);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(78);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(43);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(88);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(22);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp1=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp1);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp2=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp2);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp3=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp3);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp4=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp4);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
//		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(100);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(200);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(300);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(400);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(500);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp5=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp5);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp6=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp6);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp7=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp7);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		int temp8=arrayQueue1.getQueue();
		System.out.println("取出的元素是:"+temp8);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
//		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(1000);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(2000);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(3000);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
		
		System.out.println("-------------------------------------------------");
		arrayQueue1.addQueue(4000);
		System.out.println("队列的当前长度:"+arrayQueue1.getLength());
		System.out.print("队列的元素:");
		arrayQueue1.showQueue();
		System.out.println("队列的队头元素:"+arrayQueue1.headQueue());
	}
}

效果图:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构和算法(2)-----队列 的相关文章

  • 【Java并发】生产者消费者模型 - 两线程交替打印1-100

    生产者消费者模型 以下是其中一种通过synchronize的实现 import java util Queue import java util LinkedList public class ProducerAndConsumer pri
  • 【数字图像处理】LeetCode与图像处理(连通域的计算)

    基本概念 在数字图像处理中 有个连通域的概念 连通区域 Connected Component 一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域 Region Blob 在图像中 最小的单位是像素 每个像素周围有 8 个邻接
  • 队列(Queue) ——(一)静态线式实现

    队列 特点 先进先出 这里主要讲下静态线式的实现 由于普通队列会导致空间浪费 所以主要讲循环队列 其中 由于特点是先进先出 所以需要两个可以动的指针分别来表示进 rear 和出 front 当front rear时 表示空 表示满的方法则比
  • RabbitMQ理论+实战

    1 引出 1 1 中间件应用场景 1 跨系统数据传输 2 高并发的流量削峰 3 数据的分发与异步处理 4 大数据分析与传递 5 分布式事务 1 2 中间件常用协议 01 什么是协议 所谓协议是指 1 计算机底层操作系统和应用程序通讯时共同遵
  • 队列(一种遵循先进先出原则的数据结构)

    目录 1 队列 Queue 2 队列的抽象数据类型 队列ADT 3 队列接口 4 利用数组实现队列 4 1 队列的实现 4 2 利用数组实现队列的优势与缺点 5 利用单链表实现队列 5 1 队列的实现 5 2 利用单链表实现队列的优势与缺点
  • C/C++语言实现的一个缓存队列

    C C 语言实现的一个缓存队列 完整代码下载地址 https gitee com yzhengBTT QueueBuffer 使用方法 对于C语言 队列的创建分两种 1 静态创建 队列大小 define QUEUE SIZE 10 队列数据
  • 数据结构---填数字

    填数字 JAVA实现 C 实现 JAVA实现 public static int myFindABC int total 0 int sum 0 HashMap
  • 均方误差(MSE)

    均方误差 Mean Squared Error MSE 在相同测量条件下进行的测量称为 等精度测量 例如在同样的条件下 用同一个游标卡尺测量铜棒的直径若干次 这就是等精度测量 对于 等精度测量来说 还有一种更好的表示误差的方法 就是 标准误
  • 单调递增队列(全过程图文实现 另附习题)

    什么是单调队列 有什么用 不妨用一个问题来说明单调队列的作用和操作 不断地向缓存数组里读入元素 也不时地去掉最老的元素 不定期的询问当前缓存数组里的最小的元素 最直接的方法 普通队列实现缓存数组 进队出队都是O 1 一次查询需要遍历当前队列
  • LeetCode 232. 用栈实现队列

    题目链接 https leetcode cn problems implement queue using stacks 栈的特点是先进后出 而队列的特点是先进先出 我们用两个栈正好能把顺序反过来实现类似队列的操作 stackData 作为
  • 蛇形矩阵(Java)

    题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形 输入 本题有多组数据 每组数据由一个正整数N组成 N不大于100 输出 对于每一组数据 输出一个N行的蛇形矩阵 两组输出之间不要额外的空行 矩阵三角中同一行的数字用一个空格分
  • 剑指Offer07:重建二叉树(Java)

    题目描述 解法思路 一开始想了半个小时都没想出来 幸好得到大佬的帮助 终于做出来 嘻嘻 采用递归的思想 不断拆分左右子树即可 首先我们通过前序遍历可以看到这个树的根节点是3 然后通过中序遍历 我们可以知道9是左子树 15 20 7是右子树
  • 数据结构和算法(递归概念、迷宫回溯问题和八皇后问题代码实现)

    递归的概念 递归能够做解决什么问题 使用递归时需要注意的问题 递归的第一个应用 迷宫回溯问题 迷宫模拟 定义一个8 7的数组模拟迷宫 1表示围墙 0表示可以走的路 图中左上红圈为起点 右下红圈为终点 利用代码找到从起点到终点的路径 使用递归
  • 【RabbitMQ分析】01 SimpleMessageListenerContainer原理分析

    往期推荐 sharding sphere 01 SQL路由 Nacos源码分析 02 获取配置流程 Java并发编程 03 MESI 内存屏障 Spring源码 11 Spring AOP之编程式事务 编程开发 01 日志框架 概述 Sim
  • 数据结构——图解循环队列长度计算问题

    队列定义是这样的 define MAXSIZE 10 typedef struct ElemType data MAXSIZE int front rear SeqQueue 一个队列 一个存放元素的数组 一个队头指针 一个队尾指针 fro
  • Java语言通过三种方法来实现队列

    队列 关于作者 作者介绍 博客主页 作者主页 简介 JAVA领域优质创作者 一名在校大三学生 在校期间参加各种省赛 国赛 斩获一系列荣誉 关注我 关注我学习资料 文档下载统统都有 每日定时更新文章 励志做一名JAVA资深程序猿 文章目录 队
  • 队列以及Java实现

    了解队列 在我们的现实生活中会经常看见队列的出现 如 排队买奶茶 叫号服务和餐厅的排号 我们去餐厅准备吃饭时 由于人多只能排队等待就餐或换一家人少的餐厅 餐厅为了让服务更加的好 就会使用排队系统 排队系统完全模拟了人群排队全过程 通过取票进
  • PHP如何使用Ds\Queue Capacity()函数?代码实例

    Ds Queue capacity PHP中的函数用于检查Queue实例的当前容量 语法 int public Ds PriorityQueue capacity void 参数 此功能不接受任何参数 返回值 此函数返回Queue实例的当前
  • C++用两个栈实现队列

    1 基础 队列 先进先出 即插入数据在队尾进行 删除数据在队头进行 栈 后进先出 即插入与删除数据均在栈顶进行 2 思路 两个栈实现一个队列的思想 用pushStack栈作为push数据的栈 用popStack栈作为pop数据的栈 只要是对
  • 浏览器请求队列机制-请求为什么会阻塞

    前言 最近遇到一个问题 我1个站点链接2个后端服务 但1个后端服务有问题 导致访问超时 但请求接口都是分开的 自认为一个服务站点请求超时 不会影响到另外一个请求的 但不是 全部请求都发不出去 为什么呢 是不是浏览器有请求机制管理 正常情况前

随机推荐

  • JAVA获取部门人员树

    直接上代码 无需多言 主要还是递归 实体类 Data ApiModel NoArgsConstructor public class TreeDept implements Serializable type 0 表示是部门 type 1
  • 一个好用的在线RSS阅读器

    最近用国外IP访问有道阅读貌似有问题 于是找了一些替代品尝试 http reader aol com 这个和Google Reader最相似 不过导入有道阅读的OPML总是不成功 http www inoreader com 这个也相当好
  • Debian 10 安装网络yum源

    Debian 10 安装网络yum源 实验环境一台最小化Debian10 IP地址是192 168 10 1 24 还需要一张外网的网卡 配置网络 vim etc network interfaces 编辑网络配置文件 auto ens37
  • Python提取评论(使用pycharm+Python)

    一 安装调用所要用到的库函数 import requests from bs4 import BeautifulSoup 二 自定义根据每页影评的url爬取影评的方法 1 请求url def getData url 三 请求头为字典格式 h
  • java图片转base64注意事项

    java转base64有两点需要注意的地方 在window操作系统中 图片转换为base64 在base64的字符串中会有默认换行 这就破坏了json格式 所以这里需要做一下处理 除此之外 在java转base64时 会缺少base64字符
  • torch.cat的参数dim到底是在哪个维度拼接

    如果将两个维度为 n c h w 进行拼接 如果指定dim为以下值 dim 0 拼接后维度为 2n c h w dim 1 拼接后维度为 n 2c h w dim 2 拼接后维度为 n c 2h w dim 3 拼接后维度为 n c h 2
  • C#常见变量类型和使用规则

    C 常见变量类型和使用规则 常见变量类型 C 中值类型的变量主要包括整数类型 浮点类型 金钱 decimal 类型和布尔 bool 类型等 1 整数类型 int 范围 2 147 483 648 2 147 483 647 大小 32位有符
  • 合宙Air001点灯+闪烁(寄存器版)

    观前提醒 只是我学单片机的一个简单记录 会比较啰嗦 但是我在研究单片机寄存器过程中真实的心得体会 希望能帮到读者 打完电赛觉得自己的单片机白学了 于是想从寄存器从头开始学一遍单片机 刚好前段时间发现合宙AIR001这款单片机 外设较少且相对
  • QT之TCP网络传输系列 - 目录

    最近被大boss安排做纯软件开发项目 囧 本来我硕士方向是 传统机器学习特征提取 这一部分 读博近两年主要做 以深度学习为基础的视频分析 相关研究 我一个搞算法的去做软件开发 都是泪啊 但为了毕业 给啥任务都能 得 完成 o o 以下整理一
  • 热门去水印小助手小程序独立安装版+前端免费分享

    热门去水印小助手小程序独立安装版来自网络资源 请自测 该源码是本人在外面找回来 大家可以测试自用下 看看有什么瑰丽 去水印的也是比较火的 现在各大平台 搬运视频 大家都需要的 但是给大家一个建议 这个网上分享的共享开源源码 一般是有限制的
  • Python连接hive数据中遇到的各种坑

    这里选择的是使用 impala Python3 6来连接hive数据库 第一步要先在服务器开启hiveserver2 服务 不然会连不上的 报如下错误 开启方法很简单 到hive安装目录的bin目录下 your path apache hi
  • (三)springcloud之Consul注册服务与发现

    此文主要记录springcloud的zookeeper的注册与发现 没有过多解释 只是为了提供后期拷贝使用 主要模块分为 0 父工程模块 主要用来作为版本管理 1 公共模块Common API 用来封装其他模块的共同的功能 比如bean类
  • 为什么说分布式KVM系统是中小型指挥中心应用最广泛的控制系统?

    众所周知 在指挥中心 控制中心等场景 光纤KVM是部署控制系统的最优解 但是对于大量在的中小型指挥中心 区县级指挥中心 会议室等项目来说 必须要考虑建设的预算费用 这时部署成本适中的分布式KVM无疑是更实用的选择 目前 分布式KVM成为国内
  • QNX学习笔记-Neutrino-QNX-boot启动流程分析

    锋影 e mail 174176320 qq com 嵌入式系统的启动都是类似的 先启动一个boot程序 然后又boot控制系统的进一步加载运行 1 处理从复位向量执行代码 2 启动系统的启动代码 qnx的启动代码就是IPL 3 IPL会将
  • 计算机总是跳出交互式检测,交互式服务检测,教您如何解决电脑总是弹出交互式服务检测...

    电脑总是会弹出交互式服务检测窗口 无法关掉 只能 点击稍后提醒我 但一会儿又会提醒 这让人感觉很烦 其实 只要在系统服务里将Interactive Services Detection服务禁用即可解决此问题 下面 小编跟大家分享解决电脑总是
  • Vite 与 Vue Cli 对比 - 尤雨溪: Vite 会取代 vue-cli 吗?

    本文完整版 Vite 与 Vue Cli 对比 尤雨溪 Vite 会取代 vue cli 吗 Vite 与 Vue Cli 对比 一 Vite 与 Vue CLI 是什么 Vue CLI 的特点 Vite 的特点 二 Vite 和 Vue
  • 深度学习——使用国产深度学习框架“飞桨(PaddlePaddle)”重写房价预测模型

    一 安装飞桨 官方教程 https www paddlepaddle org cn install quick 博主本人使用的是Windows pip Python3 CPU版本 安装过程十分简单 在此不再赘述 二 使用飞桨重写模型 说明
  • mac终端命令大全介绍

    OSX 的文件系统 OSX 采用的Unix文件系统 所有文件都挂在跟目录 下面 所以不在要有Windows 下的盘符概念 你在桌面上看到的硬盘都挂在 Volumes 下 比如接上个叫做 USBHD的移动硬盘 桌面上会显示出一个硬盘图标 它实
  • Spring的一次踩坑——Could not resolve placeholder 'jdbc.driver' in string value "${jdbc.driver}"...

    问题很简单 就是运行后出现这个 根据字面意思是无法解析这个值 然后按照网上的一篇博文 添加了
  • 数据结构和算法(2)-----队列

    一 基本介绍 队列是一个有序列表 可以用数组或链表来实现 遵循先入先出的原则 即先存入队列的数据 要先取出 后存入队列的数据 要后取出 示意图 二 数组模拟队列 思路 队列本身是有序列表 若使用数组的结构来存储队列的数据 则队列数组的声明如