【数据结构】C语言队列(详解)
💥🎈个人主页:Dream_Chaser~ 🎈💥
✨✨专栏:http://t.csdn.cn/oXkBa
⛳⛳本篇内容:c语言数据结构--C语言实现队列
目录
一.队列概念及结构
1.1队列的概念
1.2队列的结构
二.队列的实现
2.1头文件
2.2链式队列的结构定义
2.3队列接口的定义
2.4初始化队列
2.5判断队列是否为空
2.6销毁队列
2.7队尾入队列
2.8队头出队列
2.9获取队列头部元素
2.10获取队列队尾元素
2.11获取队列中有效元素个数
2.12打印队列元素
Test.c
Queue.h
Queue.c
一.队列概念及结构
1.1队列的概念
队列:只允许 在一端进行插入数据操作,在 另一端进行删除数据操作的特殊线性表,队列具有 先进先出 FIFO(First In First Out)入队列: 进行插入操作的一端称为 队尾出队列: 进行删除操作的一端称为 队头
1.2队列的结构
二.队列的实现
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低
2.1头文件
#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
#include<stdlib.h>
2.2链式队列的结构定义
typedef int QDataType;
typedef struct QueueNode
{ QDataType data;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;//表示队列整体,一个是出数据,一个是入数据.
QueueNode
结构体表示队列中的节点,每个节点包含一个数据项data
和一个指向下一个节点的指针next
。Queue
结构体表示整个队列,包含指向队列头部和尾部节点的指针phead
和ptail
,以及记录队列大小的变量size
2.3队列接口的定义
void QueueInit(Queue* pq);// 初始化队列void QueueDestroy(Queue* pq);// 销毁队列void QueuePush(Queue* pq, QDataType x);// 队尾入队列void QueuePop(Queue* pq);// 队头出队列QDataType QueueFront(Queue* pq);// 获取队列头部元素QDataType QueueBack(Queue* pq);// 获取队列队尾元素int QueueSize(Queue* pq);// 获取队列中有效元素个数bool QueueEmpty(Queue* pq);// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
2.4初始化队列
void QueueInit(Queue* pq)
{assert(pq);// 检查指针是否为空pq->phead=NULL; //将队列的头指针置为空pq->ptail = NULL;//将队列的尾指针置为空pq->size = 0;// 将队列的头指针置为空
}
2.5判断队列是否为空
bool QueueEmpty(Queue* pq)
{assert(pq);//方法一,将队列的头指针以及尾指针置空//return pq->phead = NULL && pq->ptail==NULL;//方法二,将队列的有效元素置空return pq->size == 0;
}
2.6销毁队列
代码解析:
assert(pq)
用于断言pq
指针不为空,确保传入的指针有效。创建一个指针
cur
,并将其初始化为队列的头指针pq->phead
。进入循环,遍历队列中的每个节点。
在循环中,首先保存当前节点的下一个节点指针为
next
,以便在释放当前节点后能够访问下一个节点。使用
free(cur)
释放当前节点的内存。将指针
cur
移动到下一个节点,即cur = next
。循环继续,直到遍历完队列中的所有节点。
在循环结束后,将队列的头指针和尾指针
pq->phead
、pq->ptail
都置为空,表示队列已经为空。将队列的大小
pq->size
置为 0,表示队列中没有元素。
void QueueDestroy(Queue* pq)
{assert(pq);// 检查指针是否为空QNode* cur = pq->phead;// 创建一个指针 cur,指向队列的头指针while (cur){QNode* next = cur->next;// 创建一个指针 cur,指向队列的头指针free(cur);// 释放当前节点的内存cur = next;// 将指针 cur 移动到下一个节点}pq->phead = pq->ptail = NULL;// 将队列的头指针和尾指针置为空pq->size = 0;// 将队列的大小置为0
}
2.7队尾入队列
第一种情况:尾插第一个队列元素
第二种情况:已有元素前提下尾插节点
先尾插节点,后把新节点的地址给ptail(让ptail指向新节点)
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));// 创建一个新的节点if (newnode == NULL){perror("malloc fail\n");// 检查内存分配是否成功return;}newnode->data = x;// 设置新节点的数据为传入的元素值newnode->next = NULL;// 将新节点的指针域置空//一个节点if (pq->ptail == NULL)// 判断队列是否为空{assert(pq->phead == NULL);// 如果队列为空,头指针也应为空pq->phead = pq->ptail = newnode;// 将新节点同时设置为队列的头节点和尾节点}//多个节点else{pq->ptail->next = newnode;// 将新节点同时设置为队列的头节点和尾节点pq->ptail = newnode;// 更新队列的尾指针为新节点}pq->size++;// 增加队列的大小计数
}
代码执行:
2.8队头出队列
第一种:队列只有一个元素时
第二种:队列有多个元素时
void QueuePop(Queue* pq)
{assert(pq);// 检查指针是否为空assert(!QueueEmpty(pq));// 检查队列是否非空assert(pq->phead);// 检查队列的头指针是否存在//1.一个节点if (pq->phead->next == NULL) // 队列只有一个节点的情况{free(pq->phead); // 释放队列头节点的内存pq->phead = pq->ptail = NULL;// 将队列的头指针和尾指针置为空}//2.多个节点else{QNode* next = pq->phead->next; //保存队列头节点的下一个节点指针free(pq->phead);// 释放队列头节点的内存pq->phead = next;// 更新队列的头指针为下一个节点}pq->size--;//减少队列的大小计数
}
代码执行:
2.9获取队列头部元素
QDataType QueueFront(Queue* pq)
{assert(pq);// 检查指针是否为空assert(!QueueEmpty(pq));// 检查队列是否非空assert(pq->phead);// 检查队列的头指针是否存在return pq->phead->data;// 返回队列头节点的数据
}
代码执行:
2.10获取队列队尾元素
QDataType QueueBack(Queue* pq)
{assert(pq);// 检查队列是否非空assert(!QueueEmpty(pq));// 检查队列是否非空assert(pq->ptail);// 检查队列的尾指针是否存在return pq->ptail->data;//返回队列尾节点的数据
}
代码执行:
2.11获取队列中有效元素个数
int QueueSize(Queue* pq)
{assert(pq);//检查指针是否为空return pq->size;//返回队列的大小(元素个数)
}
代码执行:
2.12打印队列元素
void QPrint(Queue* pq)
{assert(pq);QNode* cur = pq->phead;QNode* next = cur;while (cur != NULL){printf("%d ", cur->data);cur = cur->next;}
}
代码执行:
Test.c
#include"Queue.h"
void TestQueue1()//元素入队列
{Queue q;QueueInit(&q);QueuePush(&q,1);QueuePush(&q,2); //printf("%d ", QueueFront(&q));//QueuePop(&q);QueuePush(&q,3);QueuePush(&q,4);//printf("Size:%d\n", QueueSize(&q));//QPrint(&q);while (!QueueEmpty(&q)){printf("%d ", QueueFront(&q));QueuePop(&q);}printf("\n");
}
void TestQueue2()//元素出队列
{Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);printf("%d\n", QueueFront(&q));QueuePop(&q);printf("%d\n", QueueFront(&q));QueuePop(&q);printf("%d\n", QueueFront(&q));QueuePop(&q);printf("%d\n", QueueFront(&q));printf("\n");
}
void TestQueue3()//获取队列头部和尾部元素,和队列元素个数
{Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);printf("队列头部元素:%d\n",QueueFront(&q));printf("队列尾部元素:%d\n", QueueBack(&q));printf("Size:%d\n", QueueSize(&q));/*while (!QueueEmpty(&q)){printf("%d ", QueueFront(&q));QueuePop(&q);}*/printf("\n");
}
void TestQueue4()//打印队列
{Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);QPrint(&q);printf("\n");
}
int main()
{//TestQueue1();//元素入队列//TestQueue2();//元素出队列//TestQueue3();//获取队列头部和尾部元素,和队列元素个数TestQueue4();
}
Queue.h
#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
#include<stdlib.h>
typedef int QDataType;
typedef struct QueueNode
{ QDataType data;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;//表示队列整体,一个是出数据,一个是入数据.void QueueInit(Queue* pq);// 初始化队列
void QueueDestroy(Queue* pq);// 销毁队列
void QueuePush(Queue* pq, QDataType x);// 队尾入队列
void QueuePop(Queue* pq);// 队头出队列
QDataType QueueFront(Queue* pq);// 获取队列头部元素
QDataType QueueBack(Queue* pq);// 获取队列队尾元素
int QueueSize(Queue* pq);// 获取队列中有效元素个数
bool QueueEmpty(Queue* pq);// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
Queue.c
#include"Queue.h"
void QueueInit(Queue* pq)
{assert(pq);// 检查指针是否为空pq->phead=NULL; // 将队列的头指针置为空pq->ptail = NULL;// 将队列的头指针置为空pq->size = 0;// 将队列的头指针置为空
}void QPrint(Queue* pq)
{assert(pq);QNode* cur = pq->phead;QNode* next = cur;while (cur != NULL){printf("%d ", cur->data);cur = cur->next;}
}void QueueDestroy(Queue* pq)
{assert(pq);// 检查指针是否为空QNode* cur = pq->phead;// 创建一个指针 cur,指向队列的头指针while (cur){QNode* next = cur->next;// 创建一个指针 cur,指向队列的头指针free(cur);// 释放当前节点的内存cur = next;// 将指针 cur 移动到下一个节点}pq->phead = pq->ptail = NULL;// 将队列的头指针和尾指针置为空pq->size = 0;// 将队列的大小置为0
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));// 创建一个新的节点if (newnode == NULL){perror("malloc fail\n");// 检查内存分配是否成功return;}newnode->data = x;// 设置新节点的数据为传入的元素值newnode->next = NULL;// 将新节点的指针域置空//一个节点//多个节点if (pq->ptail == NULL)// 判断队列是否为空{assert(pq->phead == NULL);// 如果队列为空,头指针也应为空pq->phead = pq->ptail = newnode;// 将新节点同时设置为队列的头节点和尾节点}else{pq->ptail->next = newnode;// 将新节点同时设置为队列的头节点和尾节点pq->ptail = newnode;// 更新队列的尾指针为新节点}pq->size++;// 增加队列的大小计数
}void QueuePop(Queue* pq)
{assert(pq);// 检查指针是否为空assert(!QueueEmpty(pq));// 检查队列是否非空assert(pq->phead);// 检查队列的头指针是否存在//1.一个节点if (pq->phead->next == NULL) // 队列只有一个节点的情况{free(pq->phead); // 释放队列头节点的内存pq->phead = pq->ptail = NULL;// 将队列的头指针和尾指针置为空}else{//头删QNode* next = pq->phead->next; //保存队列头节点的下一个节点指针free(pq->phead);// 释放队列头节点的内存pq->phead = next;// 更新队列的头指针为下一个节点}pq->size--;//减少队列的大小计数
}QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));// 检查队列是否非空assert(pq->phead);// 检查队列的头指针是否存在return pq->phead->data;// 返回队列头节点的数据
}QDataType QueueBack(Queue* pq)
{assert(pq);// 检查队列是否非空assert(!QueueEmpty(pq));// 检查队列是否非空assert(pq->phead);// 检查队列的头指针是否存在return pq->ptail->data;//返回队列尾节点的数据
}int QueueSize(Queue* pq)
{assert(pq);//检查指针是否为空return pq->size;//返回队列的大小(元素个数)
}
bool QueueEmpty(Queue* pq)
{assert(pq);//方法一,将队列的头指针以及尾指针置空//return pq->phead = NULL && pq->ptail==NULL;//方法二,将队列的有效元素置空return pq->size == 0;
}
本篇结束,如有错误,欢迎大家指正,感谢来访!
相关文章:
![](https://img-blog.csdnimg.cn/0a75c643fbb745339c2fcd9c5c22b389.png)
【数据结构】C语言队列(详解)
前言: 💥🎈个人主页:Dream_Chaser~ 🎈💥 ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--C语言实现队列 目录 一.队列概念及结构 1.1队列的概念 1.2队列的结构 二.队列的实现 2.1头文…...
![](https://img-blog.csdnimg.cn/2a4e8b1e5f2c404fb82fbec46226fc99.png)
【数据结构初阶】一. 复杂度讲解
相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 学C的第三十四天【程序环境和预处理】_高高的胖子的博客-CSDN博客 1 . 算法效率 (1). 什么是数据结构: 数据结构(Data Structure)是计算机存储、…...
![](https://img-blog.csdnimg.cn/c32b6d5097294a54bb75f20b12b6faa4.png)
Jmete+Grafana+Prometheus+Influxdb+Nginx+Docker架构搭建压测体系/监控体系/实时压测数据展示平台+遇到问题总结
背景 需要大批量压测时,单机发出的压力能力有限,需要多台jmeter来同时进行压测;发压机资源不够,被压测系统没到瓶颈之前,发压机难免先发生资源不足的情形;反复压测时候也需要在不同机器中启动压测脚本&…...
![](https://www.ngui.cc/images/no-images.jpg)
php提交表单将html相互字符转化的封装函数
在 PHP 中,您可以使用 htmlspecialchars() 函数将 HTML 字符转换为文本。该函数将把 <、>、" 和 等特殊字符转换为对应的 HTML 实体,从而避免跨站点脚本(XSS)攻击。 例如,如果您有一个表单输入字段的值&a…...
![](https://www.ngui.cc/images/no-images.jpg)
7 Series FPGAs GTX/GTH Transceivers
目录 1. Overview2. Block Diagram3. Transmitter4. Receiver5. Physical Coding Sublayer(PCS)6. Physical Medium Attachment(PMA)本博客为Xilinx 7系列FPGA的千兆比特高速收发器(Gigabit Transceiver, GT)介绍 ug476 - 7 Series FPGAs GTX GTH TransceiversUser Guide…...
![](https://img-blog.csdnimg.cn/e4338fd8034a4932b03df80dd31d9057.png#pic_center)
iOS系统下轻松构建自动化数据收集流程
在当今信息爆炸的时代,我们经常需要从各种渠道获取大量的数据。然而,手动收集这些数据不仅耗费时间和精力,还容易出错。幸运的是,在现代科技发展中有两个强大工具可以帮助我们解决这一问题——Python编程语言和iOS设备上预装的Sho…...
![](https://img-blog.csdnimg.cn/17e594abf8c24c1d827a519557b6d66a.png)
Android基础之Activity生命周期
Activity是Android四大组件之一、称为之首也恰如其分。 Activity直接翻译为中文叫活动。在Android系统中Activity就是我看到的一个完整的界面。 界面中看到的TextView(文字)、Button(按钮)、ImageView(图片)都是需要Activity来承载的。 总…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang 程序漏洞检测利器 govulncheck(一):安装和使用方法
govulncheck 是什么? govulncheck 是一个命令行工具,可以帮助 Golang 开发者快速找到项目代码和依赖的模块中的安全漏洞。该工具可以分析源代码和二进制文件,识别代码中对这些漏洞的任何直接或间接调用。 默认情况下,govulnchec…...
![](https://www.ngui.cc/images/no-images.jpg)
强化学习算法总结 2
强化学习算法总结 2 4.动态规划 待解决问题分解成若干个子问题,先求解子问题,然后得到目标问题的解 需要知道整个状态转移函数和价值函数,状态空间离散且有限 策略迭代: 策略评估:贝尔曼期望方程来得到一个策略的 V ( s ) V(s…...
![](https://www.ngui.cc/images/no-images.jpg)
修改node_modules避免更新覆盖 patch-package
说明:直接修改第三方库的代码,会带来团队协作的问题,使用patch-package生成补丁包 什么是 patch-package? patch-package 是一个基于 Git 的工具,它可以帮助我们对依赖包进行修复补丁。通过创建一个与问题相关的补丁文…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
Elasticsearch安装,Springboot整合Elasticsearch详细教程
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够实现近乎实时的搜索。 Elasticsearch官网https://www.elastic.co/cn/ 这篇文章主要简单介绍一下Elasticsearch,Elasticsearch的java API博主也在学习中,文章会持续更新~ …...
![](https://img-blog.csdnimg.cn/9d291d3f9278440e8d36703f33384451.png)
OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
前言:在部分大厂笔试时经常会使用OJ题目,这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解,希望对各位读者有所帮助。 题目来自牛客网,欢迎各位积极挑战: HJ73:计算日期到天数转换_牛客网 JZ17:打印…...
![](https://img-blog.csdnimg.cn/7c641bba05c44c85aacd145c03c02974.png)
混合动力汽车耐久测试
一 背景 整车厂可通过发动机和电机驱动的结合为多款车型提供混合动力驱动技术。汽车集成电机驱动可大大减少二氧化碳的排放,不仅如此,全电动驱动或混合动力驱动的汽车还将使用户体验到更好的驾驶感受,且这种汽车可通过电动机来实现更快的加速…...
![](https://img-blog.csdnimg.cn/img_convert/3cba75c203498295d43a84a4b56bd913.png)
useRef 定义的 ref 在控制台可以打印但是页面不生效?
useRef 是一个 React Hook,它能让你引用一个不需要渲染的值。 点击计时器 点击按钮后在控制台可以打印但是页面不生效。 useRef 返回的值在函数组件中不会自动触发重新渲染,所以控制台可以显示变化而按钮上无法显示 ref.current的变化。 import { use…...
![](https://img-blog.csdnimg.cn/46833b11d34541468ae449b7dbdbd95c.png)
【Java 动态数据统计图】动态数据统计思路案例(动态,排序,动态数组(重点推荐))七(129)
需求:前端根据后端的返回数据:画统计图; 说明: 1.X轴为地域,Y轴为地域出现的次数; 2. 动态展示(有地域展示,没有不展示,且高低排序) Demo案例: …...
![](https://img-blog.csdnimg.cn/81bacb076350470db0076775c8365e63.png)
Cell Reports | 揭开METTL14在介导m6A修饰中的神秘面纱
m6A被认为是最丰富的mRNA修饰,广泛分布在大多数真核生物中,包括哺乳动物、植物、昆虫、酵母和某些病毒。m6A修饰的沉积和去除之间的动态平衡对于正常的生物过程和发育至关重要,如失调通常与癌症等疾病有关。m6A修饰由m6A甲基转移酶复合物&…...
![](https://img-blog.csdnimg.cn/7ab88100c9ba4c1fb8a928371fbf5e7e.jpeg#pic_center)
297. 二叉树的序列化与反序列化
题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序…...
![](https://img-blog.csdnimg.cn/2c75aed91a1647f7b882c58db2cab08e.png)
肖sir__设计测试用例方法之边界值03_(黑盒测试)
设计测试用例方法之边界值 边界点定义 上点:边界上的点 离点:离上点最近的点(即上点左右两边最邻近的点) 内点:在域范围内的点 案例:qq号:5-12位 闭区间: 离点:5 位 &…...
![](https://img-blog.csdnimg.cn/a04a286764814986a179a6ea4a30b0cb.png)
功能测试常用的测试用例大全
登录、添加、删除、查询模块是我们经常遇到的,这些模块的测试点该如何考虑 1)登录 ① 用户名和密码都符合要求(格式上的要求) ② 用户名和密码都不符合要求(格式上的要求) ③ 用户名符合要求,密码不符合要求(格式上的要求) ④ 密码符合要求,…...
![](https://www.ngui.cc/images/no-images.jpg)
css利用flex分配剩余高度出现子组件溢出问题
1.利用flex分配剩余高度/宽度 情景:父组件高度一定,子组件中,其他子组件高度固定,一个子组件高度不确定(页面滚动列表) .father{display: flex;flex-direction: column;.son1{height: 200px;}.son2{//或 …...
![](https://img-blog.csdnimg.cn/8f2f0be15abc491782c35a86fee7eac4.png)
Java中的网络编程------基于Socket的TCP编程和基于UDP的网络编程,netstat指令
Socket 在Java中,Socket是一种用于网络通信的编程接口,它允许不同计算机之间的程序进行数据交换和通信。Socket使得网络应用程序能够通过TCP或UDP协议在不同主机之间建立连接、发送数据和接收数据。以下是Socket的基本介绍: Socket类型&…...
![](https://img-blog.csdnimg.cn/1ff20179f7bb4c18a631b10c41119487.png)
【【STM32-29正点原子版本串口发送传输实验】
STM32-29正点原子版本串口发送传输实验 通过串口接收或发送一个字符 例程目的 开发板上我们接入的是实现异步通信的UART接口 USB转串口原理图 我们一步步分析 PA9是串口1 的发送引脚 PA10是串口1 的接受引脚 。因为我们现在只是用到异步收发器功能,所以我们现…...
![](https://www.ngui.cc/images/no-images.jpg)
【面试题精讲】什么是websocket?如何与前端通信?
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 什么是WebSocket? WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久…...
![](https://img-blog.csdnimg.cn/6dd7238c91354b7e8abccf15241f11bd.png)
unity tolua热更新框架教程(2)
Lua启动流程 增加脚本luamain,继承luaclient 建立第一个场景GameMain,在对象GameMain挂载脚本LuaMain,启动场景 看到打印,lua被成功加载 lua入口及调用堆栈 这里会执行main.lua文件的main函数 C#接口导出 在此处配置C#导出的代码 …...
![](https://img-blog.csdnimg.cn/0d012b69db4547e6881eae02e0aa2eb8.png)
【0904作业】QT 完成登陆界面跳转到聊天室+完成学生管理系统的查找和删除功能
一、完成登陆界面跳转到聊天室 1> 项目结构 2> 源码 ① .pro ②main #include "mywnd.h" #include"chatCli.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MyWnd w;w.show();Form f;QObject::co…...
![](https://www.ngui.cc/images/no-images.jpg)
ceph源码阅读 buffer
ceph::buffer是ceph非常底层的实现,负责管理ceph的内存。ceph::buffer的设计较为复杂,但本身没有任何内容,主要包含buffer::list、buffer::ptr、buffer::hash。这三个类都定义在src/include/buffer.h和src/common/http://buffer.cc中。 buffe…...
![](https://img-blog.csdnimg.cn/5519a7c02a5a448798b9d5e120f886b8.jpeg)
基本介绍——数据挖掘
1.数据挖掘的定义 数据挖掘是采用数学的、统计的、人工智能和神经网络等领域的科学方法,如记忆推理、聚类分析、关联分析、决策树、神经网络、基因算法等技术,从大量数据中挖掘出隐含的、先前未知的、对决策有潜在价值的关系、模式和趋势,并…...
![](https://www.ngui.cc/images/no-images.jpg)
Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
当使用 Navicat 连接 PostgreSQL 数据库时出现 ‘datlastsysoid does not exist’ 的错误报错,这可能是由于 Navicat 版本与 PostgreSQL 版本不兼容所致。 这是因为在较新的 PostgreSQL 版本中移除了 ‘datlastsysoid’ 列,但可能较旧版本的 Navicat 尚…...
![](https://img-blog.csdnimg.cn/b5c02e22b0a54d1cb4e9b36b5011c4c8.png)
冯诺依曼体系结构/什么是OS?
一、体系结构图 示意图 控制器可以控制其它4个硬件,四个硬件直接可以进行数据传输。 5大硬件 但是这些个体需要用“线”连接。 为什么要有存储器? 如果没有,实际速度则为输入、输出设备的速度。 加上后,变为内存的速度。&#…...
![](https://www.ngui.cc/images/no-images.jpg)
SD卡/TF卡简记
文章目录 MicroSD卡与SD卡关系与区别对比NM卡、XQD卡、CFexpress卡SD规格标识FAQ拍摄1080p或2k视频需要什么速度的sd卡?拍摄4k视频需要什么速度的sd卡?拍摄8k视频需要什么速度的sd卡? MicroSD卡与SD卡关系与区别 MicroSD卡原名为Trans-flash…...
空投注册送币网站怎么做/属于b2b的网站有哪些
294 页2017年2月 第1版作者:成甲(得到:成甲说书;景区规则设计公司;知识分享)术从简。《穷查理宝典》:依靠模型组成的框架来安排你的经验。目标:一,解释问题二,…...
![](https://img-blog.csdnimg.cn/20191205214140536.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI4MTE4MDU=,size_16,color_FFFFFF,t_70)
网站建设与准备/做网站推广
前言 这篇文章主要是从pinpoint-web界面入手,我们的目标是弄清楚两个问题: - 1、 pinpoint左侧服务地图上的调用量数据是怎么查询的?- 2、界面查询条件WasOnly是什么意思? 左侧服务地图调用量来源 从下图可以看出,A…...
![](/images/no-images.jpg)
网站建设怎么付款/seo怎么优化排名
最近服务器经常出现打不开网站的现象,有时出现在上午,有时出现在中午,几乎天天都会出现一次,出现问题时,无论是回收程序池还是重启IIS或者关闭其它一些可能有影响的服务,都不能解决问题。网站打不开时&…...
![](https://img-blog.csdnimg.cn/1803c65dc28b4163a4f2adcd2a4b42bd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2X5q-N5ZOl5ZOl,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
做博彩网站要找谁/成都高端品牌网站建设
文章目录一、chiner介绍二、值得关注的功能点2.1. 兼容各种格式的数据建模文件2.2. 支持多数据库、代码生成2.3. 支持逻辑视图与物理视图设计2.4. 自动生成数据库文档三、总结一、chiner介绍 在chiner出现之前进行数据库建模设计的时候,大部分时间使用的是PowerDes…...
![](https://img-blog.csdnimg.cn/img_convert/2847c6ddba8109e552d1689713452458.png)
新疆建设云网站办理程序/微信拓客的最新方法
复盘微信支付金额不正确问题—PHP浮点型计算2020-11-15 11:58:29一、背景在做微信支付项目的时候,微信要求金额的单位必须为分,而数据库中订单金额单位是元,所以使用订单金额*100是正确的做法,但是会经常出现少一分钱的状况&#…...
![](/images/no-images.jpg)
做红包图片的网站/最近韩国电影片
1. 创建标准的表格Code:<table border"2" style"text-align:center"> <!表格的开始标签,定义边框为2,定义文本居中显示><tr> <!第1行开始标签><th>Head…...