LinkQueue.h
#pragma once
#define ElemType char
#define ERROR -1
#define OVERFLOW -2
typedef struct QueueNode{
ElemType data;
struct QueueNode* next;
} Node,*PNode;
typedef struct {
PNode front;//队列头节点
PNode rear;//队尾元素
}Queue;
//初始化队列
void InitQueue(Queue& Q);
//销毁队列
void DestroyQueue(Queue& Q);
//清空队列
void ClearQueue(Queue& Q);
//判断队列是否为空
bool QueueEmpty(Queue Q);
//获取队列长度
int QueueLength(Queue Q);
//获取队首元素
ElemType GetHead(Queue Q);
//入队
void EnQueue(Queue& Q, ElemType e);
//出队
void DeQueue(Queue& Q, ElemType& e);
//遍历队列
void QueueTraverse(Queue Q, void(*f)(ElemType e));
LinkQueue.cpp
#include "LinkQueue.h"
#include <stdio.h>
#include <stdlib.h>
//初始化队列
void InitQueue(Queue& Q) {
//添加头节点
Q.front = (Node*)malloc(sizeof(Node));
Q.rear = Q.front;
}
//销毁队列
void DestroyQueue(Queue& Q) {
ClearQueue(Q);
free(Q.front);
Q.front = Q.rear = NULL;
}
//清空队列
void ClearQueue(Queue& Q) {
char e;
while (!QueueEmpty(Q)) {
DeQueue(Q, e);
}
}
//判断队列是否为空
bool QueueEmpty(Queue Q) {
return Q.rear == Q.front ? true:false;
}
//获取队列长度
int QueueLength(Queue Q) {
PNode cur = Q.front;
int len = 0;
while (cur!=Q.rear)
{
len++;
cur = cur->next;
}
return len;
}
//获取队首元素
ElemType GetHead(Queue Q) {
if (QueueEmpty(Q)) {
return NULL;
}
return Q.front->next->data;
}
//入队
void EnQueue(Queue& Q, ElemType e) {
PNode NewNode = (Node*)malloc(sizeof(Node));
if (!NewNode) exit(OVERFLOW);
NewNode->data = e;
NewNode->next = NULL;
Q.rear->next = NewNode;
Q.rear = NewNode;
}
//出队
void DeQueue(Queue& Q, ElemType& e) {
if (QueueEmpty(Q)) exit(ERROR);
PNode cur = Q.front->next;
e = cur->data;
Q.front->next = cur->next;
if (Q.rear == cur) Q.rear = Q.front;//如果当前出队元素是最有一个元素,将队尾指针指向队首节点
free(cur);
}
//遍历队列
void QueueTraverse(Queue Q, void(*f)(ElemType e)) {
PNode cur = Q.front;
while (cur != Q.rear)
{
f(cur->next->data);
cur = cur->next;
}
printf("\nqueue length:%d\n",QueueLength(Q));
}
main.cpp(用于测试)
#include "LinkQueue.h"
#include <stdio.h>
#include <string.h>
#define EN "en"
#define DE "de"
#define GET "get"
#define EXIT "exit"
void PrintQueue(ElemType e) {
printf("%c\n",e);
}
int main() {
char opt[5],e=NULL;
Queue queue;
InitQueue(queue);
while (true)
{
gets_s(opt, 5);
if (strcmp(opt, EN) == 0) {
printf("wait for input:");
EnQueue(queue, getchar());
getchar();
}
else if (strcmp(opt, DE)==0) {
DeQueue(queue,e);
printf("DE:%c\n", e);
}
else if (strcmp(opt,GET)==0)
{
printf("GET:%c\n", GetHead(queue));
}
else if (strcmp(opt, EXIT)==0) {
DestroyQueue(queue);
break;
}
else {
printf("unkonw operation\n");
continue;
}
printf("queue:\n");
QueueTraverse(queue,PrintQueue);
}
}
关联分析是一门分析技术,用于发现大量数据中,各组数据之间的联系。关联分析是探索数据之间联系的技术,而数据之间的联系,我们用关联规则来表示,表达式为:{X}→{Y}(X 和 Y 之间不存在相同项)。大多数的关联分析工作,主要任务就是生成频繁项集和关联规则,从而发现隐藏的关联关系。现实工作中的“项”(商品)成百上千,真实的“事务”(交易)数以万计,确认频繁项集合关联规则,提高计算效率可以使用Apriori算法。
最大最小值时间限制:1000 ms | 内存限制:65535 KB难度:2描述 给出N个整数,执行M次询问。对于每次询问,首先输入三个整数C、L、R: 如果C等于1,输出第L个数到第R个数之间的最小值; 如果C等于2,输出第L个数到第R个数之间的最大值; 如果C等于3,输出第L个数到第R个数之间的最小值与最大值的和。(包括第L个数和第R
简单粗暴的解决方式是,用记事本打开将代码整段copy到Eclipse覆盖就好了。
前言之前还在学校的时候,写过一篇go gRPC初体验,算是初步预习了一下grpc的用法,知道了如何使用grpc实现简单的rpc调用,当时写了一个demo,跑通了之后就觉得,应该够用了,然而到了公司之后才发现,grpc,远不止于此。。。于是我决定好好总结一下grpc的一些进阶知识,结合公司项目里的实际用法,分享给大家,帮助初学者们更好的掌握grpc。本篇,就先介绍一下grpc的retry拦截器。为什么要retryretry很好理解,就是重试,为什么需要重试?首先,grpc常用于移动端和跨机房调用的
前言随着业务的越来越复杂,保证程序的健壮性对程序猿来说也变得更加的重要,毕竟不写Bug的程序猿不是一个好的程序猿。但怎样尽可能的保证咱们的程序能够稳定的运行,以及出错后能够进行相应的补偿,这里就需要咱们使用熔断机制了。 PS:在进入正文之前,不妨思考一下两个问题:①熔断机制究竟为我们解决了什么问题?②我们怎样去自己实现一个简单的熔断?自定义熔断的实现这里咱们简单的实现了一个超时后...
本文为系列文章"Web 软件测试 Checklist 应用系列"中的第 4 篇, 主要介绍 Checklist 在测试网页上的内容、图片和按钮时的应用,并提供一些测试工作中发现的相关产品缺陷。本文的内容包括网页产品中窗体内容、图片的格式、布局排列、准确性等方面的内容,以及按钮组件相关的内容。内容、图片和按钮测试包含的范畴在网页产品中,用户获得数据的来源中很重要的两个方面是文
一、前言之前在博客记录了一篇行为分析(python)的文章,后来觉得自己可以用SQL再走一遍,也算练练手。数据来源于天池的2020-04-13的“UserBehavior.csv”。数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。我自己的MySql版本是5.5,Na
前言近期有好多人问我,工作到了一定年龄过后,特别是三年左右,我们自身应该要具备有什么样的技能,才能去为自己争取高薪资,到底有怎么学习才能达到大厂的要求。我想这个问题也是有很多人还是不明白的,在之前的呢?我就看过左潇龙(LZ)发过有关这种问题的文章,并且写的很好,写的很具体,就我和人来说,是很有学习收藏的价值的,而且对于1-3年及以上的程序员们都可以学习参考的。那么以下文章就是经过我修改(LZ)...
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:使用递归的思想,在当前pre,vin中。先通过先序遍历的性质,pre第一个元素pre[0]为当前二叉树的根节点root。然后在中序vin中找到...
这里写自定义目录标题CDH6.0.1详细安装步骤及常见问题解决系统环境一、配置网络环境二、 配置163 yum源三、安装MySQL四、下载并安装Cloudera Manager五、配置CDHCDH6.0.1详细安装步骤及常见问题解决Cloudera Manager能够大大减轻配置hadoop集群的工作量,安装好以后能够快速熟悉Hadoop生态系统常用的一些组件,如HBase, Hive, Sp...
apply plugin: 'com.android.application'android {compileSdkVersion 27/*** 显示已过时的警告*/allprojects{gradle.projectsEvaluated {tasks.withType(JavaCompile) {options.compilerArgs << "-Xlint:unchecked" &...
1. 黑白果通用版本1.1 版本列表以下 10.7-10.11 五个版本都是黑白果通用的,已经替换过内核,默认匹配变色龙,通用驱动和配置在根目录“Extra”文件夹下,文件后面有“[MBR]”的支持安装在主引导记录即 MBR 的磁盘上。注:替换的是支持 Intel 的内核,AMD 内核自行寻找。1.2 下载网盘链接1.3 问题处理U盘安装时提示:“不能验证”问题的解决方法:打开终...