王者荣耀战区活跃度排名怎么实现的?这篇文章给你答案!

🍉博客主页:阿博历练记
📖文章专栏:数据结构与算法
🚍代码仓库:阿博编程日记
🍥欢迎关注:欢迎友友们点赞收藏+关注哦🌹

在这里插入图片描述

文章目录

    • 🌈前言
    • 🍪堆的实现
      • 🔍1.堆的结构框架
      • 🔍2.堆的初始化
      • 🔍3.堆的插入数据
      • 🪄向上调整算法
      • ⭐求父亲结点
      • ⭐注意break
      • ⭐while循环的条件
      • 🔍4.堆的删除数据(默认规定删除堆顶的数据)
      • 🪄向下调整算法
      • 💯假设法
      • ⭐没有右孩子
      • ⭐while循环的结束条件
      • 🍁向上调整和向下调整算法前提
      • 🔍5.堆的判空
      • 🔍6.取堆顶数据
      • ⭐注意判空
      • 🔍7.返回堆中数据的个数
      • ⭐堆插入数据和删除数据的时间复杂度
      • 🔍8.堆的销毁
      • 🎎堆排序
      • ⭐升序和降序是建小堆还是大堆
      • 🎮向下调整建堆的时间复杂度
      • 🎮向上调整建堆的时间复杂度
      • 🎮堆排序的时间复杂度
      • 🎎Topk问题
      • ⭐生成数据放在文件中
      • ⭐打印前k个最大的数据
      • ⭐第二次fscanf读写的位置
      • ⭐验证程序是否正确
      • 🍗heap.h代码
      • 🍗heap.c代码
      • 🍗test.c代码

🌈前言

堆的概念及结构:
在这里插入图片描述
堆的性质:
1.堆中某个节点的值总是不大于不小于父节点的值;
大堆:树中任何一个父亲都大于等于孩子。
小堆:树中任何一个父亲都小于等于孩子。
2.堆总是一棵完全二叉树
在这里插入图片描述
🔫堆并不代表有序,因为堆只规定了父亲和孩子结点的关系,对于左右孩子结点的大小关系我们是不确定的.这里阿博给友友们介绍几个堆的应用:1.堆排序(时间复杂度是N*logN) 2.topk问题3.优先级队列

🍪堆的实现

友友们,因为堆的物理结构就是一个数组,所以这里我们的底层结构是用数组实现的.

🔍1.堆的结构框架

typedef  int  HPDataType;
typedef  struct  Heap
{HPDataType* a;int  size;int  capacity;
}HP;

🔍2.堆的初始化

void  HeapInit(HP* php)
{assert(php);php->a = NULL;php->capacity = 0;php->size = 0;
}

🔍3.堆的插入数据

void  HeapPush(HP* php,HPDataType x)
{assert(php);if (php->size == php->capacity){int  newcapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = (HPDataType*)realloc(php->a, sizeof(HPDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}php->a = tmp;php->capacity = newcapacity;}php->a[php->size] = x;php->size++;AdjustUp(php->a, php->size - 1);
}

在这里插入图片描述

🪄向上调整算法

void  AdjustUp(HPDataType*a, int child)       //向上调整算法
{int parent = (child - 1) / 2;while (child>0)              //这里while循环的条件不能写成parent>=0,因为我们的parent是根本不可能小于0的,就算child来到了根结点,parent还是根节点,它还是可以进循环,逻辑不正确,这里我们的逻辑就是当孩子{                                 //来到根节点时,它就没有父结点了,所以此时我们终止循环,所以这里的条件是当child来到根节点时,就不要进入循环了       if (a[child] < a[parent]){HPDataType  tmp = a[child];a[child] = a[parent];                       //小堆a[parent] = tmp;child = parent;parent = (child - 1) / 2;}else{break;}}
}

⭐求父亲结点

在这里插入图片描述

⭐注意break

在这里插入图片描述

⭐while循环的条件

友友们注意,这里while循环的条件不能写成parent>=0因为父亲结点不会小于0,这里我们的逻辑就是当孩子结点来到根结点时就不要再进行比较了,这里如果用parent的话,当孩子结点来到根结点时,parent=(child-1)/2还是等于0,还是可以进循环,这里虽然结果不受影响,但是逻辑是不正确的,所以这里我们用child进行判断,当孩子结点来到根节点时,也就是child==0的时候,就不要再进入循环了.

🔍4.堆的删除数据(默认规定删除堆顶的数据)

void  HeapPop(HP* php)
{assert(php);assert(!HeapEmpty(php));swap(&(php->a[0]), &(php->a[php->size - 1]));php->size--;AdjustDown(php->a, php->size,0) ;
}

1.挪动删除数据,重新建堆
在这里插入图片描述
2.首尾数据交换,再删除,再调堆
在这里插入图片描述

🪄向下调整算法

void  AdjustDown(int* a, int n,int parent)
{int child = parent * 2 + 1; while (child<n){if (child+1<n&&a[child] > a[child + 1]){child++;}if (a[child] < a[parent]){swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}

💯假设法

友友们注意,这里用假设法,首先定义一个child为左孩子,假设左孩子是最小的,如果右孩子比左孩子小,那么child++,虽然我们不知道child是左孩子还是右孩子,但是它一定是左右孩子中最小的结点,如果没有采用这一种方法的话,我们就需要定义一个左孩子结点和右孩子结点,然后先让它们两个进行比较,最小的再和parent比较,这样就会出现代码大量的冗余.

⭐没有右孩子

在这里插入图片描述
这里友友们需要注意一下,因为堆是一个完全二叉树,它最后一层结点不是满的,但一定是连续的,所以我们需要注意一下右孩子结点不存在的情况,在比较左右孩子结点的时候,需要保证右孩子结点存在,否则就可能会出现越界访问.

⭐while循环的结束条件

友友们,这里我们的逻辑是每次向下调整的时候都需要对父亲结点和孩子结点进行比较,当孩子结点不存在的时候,我们就不需要进行比较了,也就是孩子结点的下标大于等于n,又因为堆是一颗完全二叉树,当左孩子结点不存在时,右孩子结点一定不存在,所以这里我们只需要判断左孩子结点是否存在就可以了.

🍁向上调整和向下调整算法前提

1.向上调整算法:在向上调整时,必须要保证调整前是堆
2.向下调整算法:必须要保证左右孩子是堆

🔍5.堆的判空

bool  HeapEmpty(HP* php)
{assert(php);return  php->size == 0;
}

🔍6.取堆顶数据

HPDataType  HeapTop(HP* php)
{assert(php);assert(!HeapEmpty(php));return   php->a[0];
}

⭐注意判空

友友们如果我们这里没有判空的话,就会出现下面三种情况:
🎲1.如果堆内有元素,那就是正常的获取堆顶元素.
🎲2.插入一个元素,再删除一个元素,此时堆已经为空了,但是如果我们没有判空的话,我们拿到的就是a[0]的数据,这就是不正确的.
🎲3.我们初始化的时候malloc了一块空间,此时堆顶的数据就是随机值.

🔍7.返回堆中数据的个数

int   HeapSize(HP* php)
{assert(php);return   php->size;
}

⭐堆插入数据和删除数据的时间复杂度

在这里插入图片描述

🔍8.堆的销毁

void  HeapDetroy(HP* php)
{assert(php);free(php->a);php->a = NULL;php->capacity = php->size = 0;
}

🎎堆排序

1.拷贝堆顶数据放到数组里面

void  HeapSort (int*a,int n)
{HP  hp;HeapInit(&hp);int  i = 0;for (int i = 0; i < n; i++){HeapPush(&hp, a[i]);}while (!HeapEmpty(&hp)){a[i++] = HeapTop(&hp);          HeapPop(&hp);}HeapDestroy(&hp);
}

友友们,虽然这种方法可行,但是有两个弊端:1.需要先有一个堆,比较麻烦.2.空间复杂度+拷贝数据

2.对数组向上调整建堆

void  HeapSort(int* a, int n)
{向上调整建堆for (int i = 1; i < n; i++){AdjustUp(a, i);}int  end = 0;for (end = n; end > 1;){swap(&a[0], &a[end-1]);end--;AdjustDown(a, end, 0);}
}

在这里插入图片描述

⭐升序和降序是建小堆还是大堆

在这里插入图片描述

3.对数组向下调整建堆

void  HeapSort(int* a, int n)
{
//	//向下调整建堆for (int i = (n-1-1)/2; i>=0; i--){AdjustDown(a, n, i);}int  end = 0;for (end = n; end > 1;){swap(&a[0], &a[end - 1]);end--;AdjustDown(a, end, 0);}
}

在这里插入图片描述

🎮向下调整建堆的时间复杂度

在这里插入图片描述

🎮向上调整建堆的时间复杂度

在这里插入图片描述

🎮堆排序的时间复杂度

在这里插入图片描述

🎎Topk问题

⭐生成数据放在文件中

void  CreateNDate()
{srand((unsigned int)time(0));int  n = 1000;const char* file = "data.txt";FILE* fin = fopen(file, "w");if (fin == NULL){perror("fopen  fail");return;}for (size_t i = 0; i < n; i++){int x = rand()%1000000;fprintf(fin, "%d\n", x);}fclose(fin);
}

⭐打印前k个最大的数据

void  PrintTopk(int k)
{const char* file = "data.txt";FILE* fout = fopen(file, "r");if (fout == NULL){perror("fopen  fail");return;}int* kminheap = (int*)malloc(sizeof(int) * k);if (kminheap == NULL){perror("malloc  fail");return;}for (int i = 0; i < k; i++){fscanf(fout,"%d",&kminheap[i]);}for (int i = (k - 1 - 1) / 2; i >= 0; i--){AdjustDown(kminheap, k, i);}int  value = 0;while (!feof(fout)){fscanf(fout,"%d",&value);                //注意这里文件指针已经不是从头开始读了,因为前面文件指针已经读取k个数据了if (value > kminheap[0]){swap(&value, &kminheap[0]);AdjustDown(kminheap, k, 0);}}for (int i = 0; i < 5; i++){printf("%d ", kminheap[i]);}
}

在这里插入图片描述

⭐第二次fscanf读写的位置

友友们注意,第一次fscanf从文件中读取了前k个数据建小堆,文件指针来到了第k+1个位置,所以当我们建完小堆之后再次fscanf,它就会从第k+1个位置开始读数据.

⭐验证程序是否正确

友友们,这里我们无法确定我们打印的就是N个数据中最大的前K个,但是我们可以手动改变,因为我们生成的数都在1000000以内,所以我们可以写几个大于1000000的数据,如果它能打印出来,就证明我们这个程序是正确的.

在这里插入图片描述
在这里插入图片描述

🍗heap.h代码

#pragma once
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>
#include<stdio.h>
typedef  int  HPDataType;
typedef  struct  Heap
{HPDataType* a;int  size;int  capacity;
}HP;
void  HeapInit(HP* php);
void  HeapDestroy(HP* php);
void  HeapPush(HP* php,HPDataType x);
void  HeapPop(HP* php);
HPDataType  HeapTop(HP* php);
bool  HeapEmpty(HP* php);
int   HeapSize(HP* php);
void  AdjustUp(int* a, int child);
void  AdjustDown(int* a, int n, int parent);
void  swap(HPDataType* p1, HPDataType* p2);

🍗heap.c代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include"Heap.h"
void  HeapInit(HP* php)
{assert(php);php->a = NULL;php->capacity = 0;php->size = 0;
}
void  HeapDestroy(HP* php)
{assert(php);free(php->a);php->a = NULL;php->capacity = php->size = 0;
}
void  AdjustUp(int*a, int child)       //向上调整算法
{int parent = (child - 1) / 2;while (child>0)              //这里while循环的条件不能写成parent>=0,因为我们的parent是根本不可能小于0的,就算child来到了根结点,parent还是根节点,它还是可以进循环,逻辑不正确,这里我们的逻辑就是当孩子{                                 //来到根节点时,它就没有父结点了,所以此时我们终止循环,所以这里的条件是当child来到根节点时,就不要进入循环了       if (a[child] < a[parent]){swap(&a[child], &a[parent]);                              //小堆child = parent;parent = (child - 1) / 2;}else{break;}}
}
void  HeapPush(HP* php,HPDataType x)
{assert(php);if (php->size == php->capacity){int  newcapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = (HPDataType*)realloc(php->a, sizeof(HPDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}php->a = tmp;php->capacity = newcapacity;}php->a[php->size] = x;php->size++;AdjustUp(php->a, php->size - 1);
}
void  swap(HPDataType* p1,HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}
void  AdjustDown(int* a, int n,int parent)
{int child = parent * 2 + 1; while (child<n){if (child+1<n&&a[child] > a[child + 1]){child++;}if (a[child] < a[parent]){swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}
void  HeapPop(HP* php)
{assert(php);assert(!HeapEmpty(php));swap(&(php->a[0]), &(php->a[php->size - 1]));php->size--;AdjustDown(php->a, php->size,0) ;
}
HPDataType  HeapTop(HP* php)
{assert(php);assert(!HeapEmpty(php));return   php->a[0];
}
bool  HeapEmpty(HP* php)
{assert(php);return  php->size == 0;
}
int   HeapSize(HP* php)
{assert(php);return   php->size;
}

🍗test.c代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include"Heap.h"
#include<time.h>
//int  main()
//{
//	HP  hp;
//	HeapInit(&hp);
//	int  arr[] = { 65,100,70,32,50,60 };
//	for (int i = 0; i < 6; i++)
//	{
//		HeapPush(&hp, arr[i]);
//	}
//	while (!HeapEmpty(&hp))
//	{
//		printf("%d\n", HeapTop(&hp));      //有序打印,不是排序
//		HeapPop(&hp);
//	}
//	return  0;
//}
//void  HeapSort (int*a,int n)
//{
//	HP  hp;
//	HeapInit(&hp);
//	int  i = 0;
//	for (int i = 0; i < n; i++)
//	{
//		HeapPush(&hp, a[i]);
//	}
//	while (!HeapEmpty(&hp))
//	{
//		a[i++] = HeapTop(&hp);           //弊端:1.先有一个堆,太麻烦 2.空间复杂度+拷贝数据
//		HeapPop(&hp);
//	}
//	HeapDestroy(&hp);
//}
void  HeapSort(int* a, int n)
{向上调整建堆//for (int i = 1; i < n; i++)//{//	AdjustUp(a, i);//}//int  end = n;//while(end>1)//{//	swap(&a[0], &a[end-1]);//	end--;//	AdjustDown(a, end, 0);//}//向下调整建堆for (int i = (n-1-1)/2; i>=0; i--){AdjustDown(a, n, i);}int  end = n;while(end>1){swap(&a[0], &a[end - 1]);end--;AdjustDown(a, end, 0);}
}
void  CreateNDate()
{srand((unsigned int)time(0));int  n = 1000;const char* file = "data.txt";FILE* fin = fopen(file, "w");if (fin == NULL){perror("fopen  fail");return;}for (size_t i = 0; i < n; i++){int x = rand()%1000000;fprintf(fin, "%d\n", x);}fclose(fin);
}
void  PrintTopk(int k)
{const char* file = "data.txt";FILE* fout = fopen(file, "r");if (fout == NULL){perror("fopen  fail");return;}int* kminheap = (int*)malloc(sizeof(int) * k);if (kminheap == NULL){perror("malloc  fail");return;}for (int i = 0; i < k; i++){fscanf(fout,"%d",&kminheap[i]);}for (int i = (k - 1 - 1) / 2; i >= 0; i--){AdjustDown(kminheap, k, i);}int  value = 0;while (!feof(fout)){fscanf(fout,"%d",&value);                //注意这里文件指针已经不是从头开始读了,因为前面文件指针已经读取k个数据了if (value > kminheap[0]){swap(&value, &kminheap[0]);AdjustDown(kminheap, k, 0);}}for (int i = 0; i < 5; i++){printf("%d ", kminheap[i]);}printf("\n");
}
int  main()
{/*top问题10000个数中,找出最大的前十个建立大堆,pop9次*/int  a[] = { 7,8,3,5,1,9,5,4 };HeapSort(a, sizeof(a) / sizeof(a[0]));/*文件中找Topk问题*///CreateNDate();PrintTopk(5);return  0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61716.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

王者荣耀段位计算器软件

功能介绍&#xff1a;smwan.cn 主要主要分为两大模块&#xff1a;1、星数计算&#xff1b;2、战力查询&#xff1b; 1、星数计算&#xff1a;主要用于快速计算段位之间的星数差距&#xff0c;帮助职业代练师快速计算费用&#xff1b; 2、战力查询&#xff1a;主要用于快速查询…

微信与qq怎么连接到服务器,王者荣耀微信和qq可以一起玩吗 王者荣耀微信和qq互通吗说明...

王者荣耀微信和qq可以一起玩吗?王者荣耀微信和qq互通吗?有些玩家可能和朋友不在一个平台&#xff0c;想开黑但是不知道微信和qq是否能一起玩&#xff0c;下面跟小编来看看这篇王者荣耀微信和qq互通吗说明吧! 王者荣耀微信和qq互通吗说明 首先我们来看一下王者荣耀新开服务器的…

JAVA根据营地号获取王者荣耀数据(王者荣耀战绩及王者荣耀对局详情查询)网页源码下载

目录 营地号查询 战绩查询 对局详情查询 下载 营地号查询 根据营地号获取王者荣耀战绩、皮肤、英雄数据 可提接口测试 战绩查询 对局详情查询 下载 网页源码

王者荣耀赛季末上分很枯燥,可以找一个猎游陪练一起上分

哪一种情况才能满足自己内心的那种需要呢&#xff1f;其实就是找一个与自己内心匹配的朋友和自己做自己想做的事情&#xff0c;这样的情况之下&#xff0c;自己的内心需要会得到满足&#xff0c;而且也容易将自己的快乐传播出去&#xff0c;当然在王者荣耀这个赛季末的时候&…

王者微信去什么服务器好,王者荣耀:为什么微信区比QQ区容易上王者,老玩家道出实情...

原标题&#xff1a;王者荣耀&#xff1a;为什么微信区比QQ区容易上王者&#xff0c;老玩家道出实情 大家好&#xff0c;我是信白&#xff0c;今天就给大家说说在王者荣耀中微信服务器比在QQ服务器中更容易上分&#xff0c;其实这个是有一定的原因的&#xff0c;今天就给大家道出…

C温故补缺(十八):网络编程

C温故补缺(十八):网络编程 计算机网络 参考:TCP三次握手详解. OSI模型 简单分层&#xff1a; 其中&#xff0c;链路层还可以分出物理层和数据链路层。应用层可以分出会话层&#xff0c;表示层和应用层。 七层模型&#xff1a; 链路层&#xff1a;只是物理的比特流和简单封…

【网络编程】计算机网络基础知识总结 | 运输层 |TCP协议

文章目录 前言一、计算机网络层次结构二、网络层三、运输层3.1、TCP/IP协议介绍3.2、端口&#xff08;协议端口号&#xff09;3.3、套接字3.4、TCP实现原理3.4.1、TCP的特点3.4.2、停止等待协议3.4.3、滑动窗口协议3.4.4、拥塞控制3.4.5、TCP连接的三个阶段 3.5、UDP实现原理 前…

前OPPO高管王腾,担任小米中国区销售运营一部负责人

近日有媒体报道&#xff0c;小米手机中国市场的核心职位—小米中国区销售运营一部负责人发生变动。80后年轻干部王腾将接替跟随小米中国区销售运营一部总经理朱磊&#xff0c;主持该部日常工作&#xff0c;职位仍为副总经理&#xff0c;但向中国区总裁卢伟冰汇报。朱磊转任中国…

小米的人事调整颇为特别,被击败的前对手高管纷纷担任小米高管

小米又一次进行了人事调整&#xff0c;这次是中国区的三个销售运营部门&#xff0c;统一由王晓雁负责&#xff0c;向卢伟冰汇报。王晓雁是小辣椒手机的创始人&#xff0c;2019 年加入小米&#xff0c;曾负责小米的电商渠道&#xff0c;此前已有多个被小米击败的前中国手机品牌高…

港联证券|“牛市旗手”频遭股东减持 机构仍看好板块后市表现

5月8日&#xff0c;证券板块再迎爆发。截至收盘&#xff0c;中国银河盘中触及涨停&#xff0c;收盘涨超7%&#xff0c;中银证券涨超5%&#xff0c;信达证券、光大证券、招商证券涨超4%。板块回暖之际&#xff0c;多家券商二季度却遭遇股东减持。业内人士认为&#xff0c;减持计…

解读“疯子”马斯克

https://www.toutiao.com/a6703410527571280397/ 对每一个不被认可&#xff0c;被嘲讽&#xff0c;且遮掩住光芒&#xff0c;但坚持拼搏的前行者&#xff0c;我们都应抱有一丝敬意。 ——猛鼬 猛鼬原创第59篇 算算时间&#xff0c;自2011年一代天骄乔布斯病逝已过去8年&#…

Android 短信验证 SDK 接入(Mob SMSSDK)

博主声明&#xff1a; 转载请在开头附加本文链接及作者信息&#xff0c;并标记为转载。本文由博主 威威喵 原创&#xff0c;请多支持与指教。 本文首发于此 博主&#xff1a;威威喵 | 博客主页&#xff1a;https://blog.csdn.net/smile_running 短信验证接口有很多&#xf…

怎么快速在计算机植入病毒,怎样给别人的电脑植入病毒

太简单了。这是病毒植入系统的一种表现&#xff0c;你删了也没用&#xff0c;因为这种系统植入性的病毒一般是能够修改系统注册表的&#xff0c;所以你删掉它会通过注册表再重新创建一摸一样的文件。建议你用以下方法解决&#xff0c;如果这还不行&#xff0c;建议重装系统&…

chatgpt对编程的作用

1、将delphi代码转换成c代码。 请将以下代码转换成c语言 if (Joint.TrackingState TrackingState_Tracked) thenbeginHandState : Body.HandRightState;if (HandState HandState_Open) thenbeginWriteLn(Right hand is open);endelse if (HandState HandState_Closed) the…

安卓,上传图片不能调取照相机拍照

我们常见的上传文件或者图片 是使用的input <form><input type"file" name"pic" id"pic" /> </form>此时一个问题出现&#xff1a; 如果是上传照片图片&#xff0c;安卓机有一个问题&#xff0c;只能选取照片&#xff0c;不…

2023 年6月开发者调查统计结果——最流行的技术(1)

2023 年6月开发者调查统计结果——最流行的技术&#xff08;1&#xff09; 本文目录&#xff1a; 一、编程、脚本和标记语言 二、数据库 三、云平台 四、网络框架和技术 五、其他框架和库 六、其他工具 七、集成开发环境 八、异步工具 九、同步工具 ​十、操作系统 …

又一个开源便斩获 7k star 的新模型「GitHub 热点速览」

作者&#xff1a;HelloGitHub-小鱼干 Star 并不能代表什么&#xff0c;但是绝对能表示一个项目的受欢迎程度。就像刚开源一周就有 7k star 的新模型&#xff0c;输入文本 / 图像就能获得 3D 对象。除了这个新模型&#xff0c;本周还有一款新的 Web 3D 渲染引擎 Orillusion&…

您无法登录,因为您使用的登录方法......

您无法登录&#xff0c;因为您使用的登录方法在此计算机上不允许&#xff0c;请咨询管理员...... 计算机已加入到了域中就是无法登录到local计算机中报上面错误。 1、检查组策略里面拒绝登录的账号是否在列 2、这种方法可将就用 3、以上还是不太好用不是最终想要的结果 以上都…

关于VS无法登录账号问题

概述 最近发现安装vs2013社区版后&#xff0c;无法登录微软账号&#xff0c;通过搜索相关解决方法&#xff0c;发现修改注册表的方式有效&#xff0c;故记录如下。 步骤 打开注册表编辑器 执行win r操作&#xff0c;呼出运行窗口&#xff0c;输入regedit&#xff0c;点击确…

苹果计算机使用方法,不知道这10个Mac使用技巧,别说你会用苹果电脑

原标题&#xff1a;不知道这10个Mac使用技巧&#xff0c;别说你会用苹果电脑 虽然Mac的用户体验做的非常优秀&#xff0c;很多功能用户只需要下意识去使用即可&#xff0c;但还是有一些隐藏的比较深的小技巧&#xff0c;如果没人指点的话还真不一定知道。今天小编就为大家分享1…