数据结构和算法(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)-----队列 的相关文章

  • C++队列queue用法详解(超详细)

    点击蓝字 关注我们 一 定义 queue是一种容器转换器模板 调用 include lt queue gt 即可使用队列类 二 queue初始化 queue
  • 详解八大排序算法-附动图和源码(插入,希尔,选择,堆排序,冒泡,快速,归并,计数)

    目录 一 排序的概念及应用 1 排序的概念 2 排序的应用 3 常用的排序算法 二 排序算法的实现 1 插入排序 1 1直接插入排序 1 2希尔排序 缩小增量排序 2 选择排序 2 1直接选择排序 2 2堆排序 3 比较排序 3 1冒泡排序
  • 二叉搜索树的定义、查找、插入和删除

    二叉搜索树的定义 查找 插入和删除 原创 2016年07月21日 21 59 00 二叉搜索树的定义 二叉搜索树 也称有序二叉树 排序二叉树 是指一棵空树或者具有下列性质的二叉树 1 若任意节点的左子树不空 则左子树上所有结点的值均小于它的
  • RocketMQ-名词和架构

    RocketMQ rocketMQ是做什么的我就不用解释了吧 以及他的背景 本文主要是为了让大家明白RocketMQ的工作原理 架构图 上图 双箭头代表是双向通信 ProducerGroup和ConsumerGroup以及Broker集群
  • 队列(一种遵循先进先出原则的数据结构)

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

    想要利用两个栈实现一个队列 首先我们需要搞清楚栈和队列的特性 栈是后进先出 是一个压栈的过程 而队列则是先进先出的一个过程 用两个栈去实现一个队列 该怎样做 首先假如我们有一组数据 7 5 9 2 然后我们需要一个栈 stack
  • linux内核之无锁缓冲队列kfifo原理(结合项目实践)

    无锁缓冲队列kfifo 1 kfifo概述 2 kfifo功能描述 3 kfifo put与 kfifo get详解 4 kfifo get和kfifo put无锁并发操作 5 总结 6 项目使用介绍 7 其它 userspace 移植实现
  • 蛇形矩阵(Java)

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

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

    堆排序 一般使用大顶堆升序排列 使用小顶堆降序排列 下图为代码测试的树 数组格式 堆降序代码实现 import java util Arrays public class HeapSort public static void main S
  • 解释二叉树深度和高度

    今天小伙伴在群里问到 面试官问这个问题 我第一印象 这不是一回事吗 去查了查 竟然还真有区别 所以在此记录一下 高度和深度是相反的表示 深度是从上到下数的 而高度是从下往上数 我们先来看看高度和深度的定义 某节点的深度是指从根节点到该节点的
  • 算法与数据结构(七):优先队列

    博主会对算法与数据结构会不断进行更新 敬请期待 如有什么建议 欢迎联系 我们知道队列具有先进先出的特性 栈具有先进后出的特性 那么有没有一种数据结构可以根据自己的需求 以一定的规则从队列中弹出呢 优先队列就是实现这种目标的数据结构 一般情况
  • CH3-栈和队列

    文章目录 3 1栈和队列的定义和特点 栈的应用 队列的应用 3 1 1栈的定义和特点 3 1 2队列的定义和特点 3 2案例引入 案例3 1 进制转换 案例3 2 括号匹配的检验 案例3 3 表达式求值 案例3 4 舞伴问题 3 3栈的表示
  • 二叉树的先序,中序,后序遍历

    java 二叉树的先序 中序 后序遍历 一 前序遍历 访问顺序 先根节点 再左子树 最后右子树 上图的访问结果为 GDAFEMHZ 1 递归实现 public void preOrderTraverse1 TreeNode root if
  • 数据结构和算法(递归概念、迷宫回溯问题和八皇后问题代码实现)

    递归的概念 递归能够做解决什么问题 使用递归时需要注意的问题 递归的第一个应用 迷宫回溯问题 迷宫模拟 定义一个8 7的数组模拟迷宫 1表示围墙 0表示可以走的路 图中左上红圈为起点 右下红圈为终点 利用代码找到从起点到终点的路径 使用递归
  • java多线程:线程池和阻塞队列

    一 线程池定义和使用 jdk 1 5 之后就引入了线程池 1 1 定义 从上面的空间切换看得出来 线程是稀缺资源 它的创建与销毁是一个相对偏重且耗资源的操作 而Java线程依赖于内核线程 创建线程需要进行操作系统状态切换 为避免资源过度消耗
  • 堵塞队列之ArrayBlockingQueue和LinkedBlockingQueue解析

    在线程池创建的时候 需要传一个堵塞队列来维护需要执行的线程任务 其中最常用的是ArrayBlockingQueue和LinkedBlockingQueue 他们都继承了BlockingQueue接口 ArrayBlockingQueue 一
  • STL deque 源码——deque特点、实现框架、源码分段剖析、常用函数总结(上)

    一 deque的一些特点 支持随机访问 即支持 以及at 但是性能没有vector好 可以在内部进行插入和删除操作 但性能不及list deque 两端 都能够快速插入和删除元素 而vector只能在尾端进行 deque的元素存取和迭代器操
  • 队列以及Java实现

    了解队列 在我们的现实生活中会经常看见队列的出现 如 排队买奶茶 叫号服务和餐厅的排号 我们去餐厅准备吃饭时 由于人多只能排队等待就餐或换一家人少的餐厅 餐厅为了让服务更加的好 就会使用排队系统 排队系统完全模拟了人群排队全过程 通过取票进
  • C++用两个栈实现队列

    1 基础 队列 先进先出 即插入数据在队尾进行 删除数据在队头进行 栈 后进先出 即插入与删除数据均在栈顶进行 2 思路 两个栈实现一个队列的思想 用pushStack栈作为push数据的栈 用popStack栈作为pop数据的栈 只要是对

随机推荐

  • 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)-----队列

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