数据结构——链式队列解析(C语言版)

摘自:数据结构学习——链式队列解析(C语言版)
作者:正弦定理
发布时间:2020-11-26 21:07:08
网址:https://blog.csdn.net/chinesekobe/article/details/110203428

数据结构——链队列解析过程和简单代码实现:

  • 一、简单概念:
    • 动图展示:
      • (1)入队:
      • (2)出队:
  • 二、顺序队列:
    • 思路
    • 步奏:
      • (1)入队操作:
      • (2)出队操作:
    • 简单实现代码:
  • 三、链式队列
    • (1)声明
    • (2)入队操作:
    • (3)出队操作:
    • (4)检查队列是否为空:
    • 全部代码:

一、简单概念:

队列,又称为伫列(queue),是先进先出(FIFO,First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作

队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加

与栈(stack)不同的是,队列是FIFO(First In First Out,先进先出),进入队列的一端叫尾部(rear),出队列的一端叫头部(front)。队列的主要操作也有两个:入队(offer)、出队(poll)

动图展示:

(1)入队:

在这里插入图片描述

从图中可以看到,A、B、C三个元素都是从队尾(rear)进入,就像现实生活中的排队,先来的就排在前面

(2)出队:

在这里插入图片描述

从图中可以看出,出队的顺序是A->B->C,也就是入队的顺序,即说明了队列是遵循FIFO的。队列的引用也十分广泛,锁的实现、生产者-消费者模型等都离不开队列

队列也有两种实现方式:顺序队列链式队列

二、顺序队列:

思路

在顺序队列中,通常让队尾指针rear指向刚进队的元素的位置,让队首指针 front 指向刚出队的元素的位置。因此,元素进队的时候rear指针要向后移动,元素出队的时候front指针也要向后移动。这样经过一系列的操作后,两个指针最终会到达数组的末端处,虽然队中已没有了元素,但是仍然无法插入元素,这就是所谓的“假溢出”。

为了解决假溢出的问题,可以将数组弄成一个环状,让 rear 和 front 指针沿着环走,这样就不会出现无法继续走下去的情况,这样就产生了循环队列,如下图所示 :

  • 队空状态 :qu.rear == qu.front

  • 队满状态 : (qu.rear + 1) % Maxsize == qu.front

  • 元素的进队操作 :qu.rear = (qu.rear + 1) % Maxsize ; qu.data[qu.rear] = x ;

  • 元素的出队操作 :qu.front = (qu.front + 1) % Maxsize ; x = qu.data[qu.front] ;

本次思路中 元素入队时先移动指针,后存入元素;元素出队时也是先移动指针,后元素出队

步奏:

(1)入队操作:

int inQueue(Squeue &qu,int x)
{//判断队列是否已满,若满则无法入队if((qu.rear + 1) % Maxsize == qu.front){return 0;}//队列没有满,则先移动指针,在插入元素qu.rear = (qu.rear + 1) % Maxsize;qu.data[qu.rear] = x;return 1; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(2)出队操作:

int deQueue(Squeue &qu,int &x)
{//若队列已空,则无法取出元素if(qu.front == qu.rear){return 0;}//否则先移动指针,再将元素取出qu.front = (qu.front + 1) % Maxsize;x = qu.data[qu.front];return 1;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

简单实现代码:

//顺序队列
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 20//定义队列的结构体 
typedef struct Squeue{int data[Maxsize];int front;int rear;
}Squeue; //初始化队列 
void InitQueue(Squeue &qu)
{qu.front = qu.rear = 0;
}//判断队列是否为空 
int isQueueEmpty(Squeue qu)
{if(qu.front == qu.rear){return 1;}else{return 0;}
}//元素入队操作 
int inQueue(Squeue &qu,int x)
{//若队满则无法入队 if((qu.rear + 1) % Maxsize == qu.front){return 0;}qu.rear = (qu.rear + 1) % Maxsize;qu.data[qu.rear] = x;return 1; 
}//元素出队操作 
int deQueue(Squeue &qu,int &x)
{//若队空则无法出队 if(qu.front == qu.rear){return 0;}qu.front = (qu.front + 1) % Maxsize;x = qu.data[qu.front];return 1;
}int main()
{Squeue q;int i , n , x , a;InitQueue(q);scanf("%d",&n);for(i = 0;i < n;i++){scanf("%d",&a);inQueue(q,a);}//当队列非空时,输出队列中所有数据 while(!isQueueEmpty(q)){deQueue(q,x);printf("%d ",x);}return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

三、链式队列

以 模拟患者在医院等待就诊的情况为例子 实现链式队列:

  • 患者到达诊室,将病历交给护士,排到等待队列中候诊
  • 护士从等待队列中取出下一位患者的病历,该患者进入诊室就诊
  • 功能如下:

1)排队: 输入排队患者的病历号(随机产生),加入到就诊患者排队队列中
2)就诊: 患者队列中最前面的病人就诊,并将其从队列中删除
3)查看: 从队首到队尾列出所有排队患者的病历号
4)下班: 退出运行

(1)声明

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>typedef int ElementType;typedef struct Node{ElementType data;		//	存放数据 struct Node *next;		//	链表指针 }Node;typedef struct SeqQueue{Node *head;				//	队列头部 Node *wei; 				//	队列尾巴 ElementType size;		//	计算队列长度 
}Seq; typedef struct SeqQueue* Queue;		//	代表队列这个结构体指针
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

(2)入队操作:

//	创建链表,存放数据
Node *Create_Link(ElementType data)
{Node * new = (Node *)malloc(sizeof(Node));	//	开辟空间存数据 if(new == NULL){printf("开辟空间失败\n");}new ->data = data;			//	存放队列数据new ->next = NULL;			//	让尾巴指向NULLreturn new;					//	返回节点指针
}//	判断队列是否为空
bool QueueEmpty(Queue q) {if (q->head == NULL)return true;		//		队列为空return false;
}//	入队 
Queue * Push(Queue sum,ElementType data)	
{Node *LinkHead = Create_Link(data);		//	接收链表空间节点指针Queue p = sum;if(QueueEmpty(p) == true){p->head = p->wei= LinkHead;		//		第一次赋值会进入 return p;			//	返回值指向队列的头指针}else{p->wei->next = LinkHead;		//		让队尾next指针指向这个空间 p->wei = LinkHead;				//		队尾指针存入这个空间 }p->size++;				//		计算队伍长度 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

(3)出队操作:

//	出队 
ElementType Pop(Queue q)
{ElementType count;		//	取队列数据 Node *Link;				if(QueueEmpty(q) == true){printf("数据已经从队列出完\n");q->wei = NULL;return -1;}Link = q->head;			//	让队列头给链表指针 count = Link->data;		//	链表头指针取出数据 q->head = Link->next;	//	让队列头指针移到链表头指针下一个节点位置,并指向它 free(Link);				//	释放已经出队的链表节点 return count;			//	返回取出的数据 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

(4)检查队列是否为空:

//	判断队列是否为空
bool QueueEmpty(Queue q) {if (q->head == NULL)return true;		//		队列为空return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

全部代码:

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>typedef int ElementType;typedef struct Node{ElementType data;		//	存放数据 struct Node *next;		//	链表指针 }Node;typedef struct SeqQueue{Node *head;				//	队列头部 Node *wei; 				//	队列尾巴 ElementType size;		//	计算队列长度 
}Seq; typedef struct SeqQueue* Queue;//	初始化队列 
void Init_SeqQueue(Queue q)
{q->head = NULL;q->wei  = NULL;q->size = 0;	
}//	创建链表,存放数据
Node *Create_Link(ElementType data)
{Node * new = (Node *)malloc(sizeof(Node));	//	开辟空间存数据 if(new == NULL){printf("开辟空间失败\n");}new ->data = data;			//	存放队列数据new ->next = NULL;			//	让尾巴指向NULLreturn new;					//	返回节点指针
}//	判断队列是否为空
bool QueueEmpty(Queue q) {if (q->head == NULL)return true;		//		队列为空return false;
}//	入队 
Queue Push(Queue sum,ElementType data)	
{Node *LinkHead = Create_Link(data);		//	接收链表空间节点指针Queue p = sum;if(QueueEmpty(p) == true){p->head = p->wei= LinkHead;		//		第一次赋值会进入 return p;			//	返回值指向队列的头指针}else{p->wei->next = LinkHead;		//		让队尾next指针指向这个空间 p->wei = LinkHead;				//		队尾指针存入这个空间 }p->size++;				//		计算队伍长度 
}//	出队 
ElementType Pop(Queue q)
{ElementType count;		//	取队列数据 Node *Link;				if(QueueEmpty(q) == true){printf("数据已经从队列出完\n");q->wei = NULL;return -1;}Link = q->head;			//	让队列头给链表指针 count = Link->data;		//	链表头指针取出数据 q->head = Link->next;	//	让队列头指针移到链表头指针下一个节点位置,并指向它 free(Link);				//	释放已经出队的链表节点 return count;			//	返回取出的数据 
}//	初始化菜单 
void Init_Memu()
{printf("***********************************\n");printf("*          1.入队                 *\n");printf("*          2.出队                 *\n");printf("*          3.取队头元素           *\n");printf("*          4.查看队列是否为空     *\n");printf("*          5.插入队列(排队)       *\n");printf("*          6.就诊                 *\n");printf("*          7.查看                 *\n");printf("*          8.下班                 *\n");printf("***********************************\n");}//功能选择函数 
ElementType Choose_GN()
{int flag;scanf("%d",&flag);return flag;
}//	主函数 
int main()
{Seq S_Queue;			//	创建队列结构体对象 Init_SeqQueue(&S_Queue);	//	初始化队列 Queue q = NULL;			 int temp;int num=0;while(1){Init_Memu();printf("请选择你的需求:\n"); temp =  Choose_GN();Node* p = NULL;switch(temp){//	入队 case 1:{ElementType num;while(1){printf("请输入你要进队列的数据(输入0时结束输入):\n"); scanf("%d",&num);if( num == 0){break;}q = Push(&S_Queue,num);		//	接受队头指针head }}break;//	出队	case 2:{int flag;while(1){flag = Pop(&S_Queue);if(flag == -1){printf("出队列完毕\n");	break;}else{printf("出队数据为: %d\n",flag);}}}break;//	取队头元素	case 3:{ElementType sum;p = q->head;		//	取出队头指针 if( p == NULL){printf("队伍已经出队,没有数据\n");break;} sum = p->data;		//	队头指针取值 printf("队列头数据为: %d \n",sum);}	break;//	查看队列是否为空	case 4:{if(QueueEmpty(q) == true){printf("队伍为空\n");}else{printf("队伍还有数据,不为空\n"); }}break;//	插入队列元素 case 5:{int s;printf("请输入你要添加到就诊队伍的病历号:\n");scanf("%d",&s);q = Push(q,s);		//	把输入的数据插入队列中 printf("添加成功!\n");	} break;//	就诊	case 6:{ElementType count1;Node *Link1;Link1 = q->head;			//	取队头指针 count1 = Link1->data;		//	队头指针指向内容取值 q->head = Link1->next;		//	让队头指针移到下一个节点 free(Link1);				//	释放刚才那个头节点printf("第%d 个患者开始就诊,病历号为: %d\n",++num,count1);if(QueueEmpty(q) == true)	//	判断队伍是否还有人 {printf("病人已经全部就诊完毕\n");break; }}break;//	查看(相当于出队) case 7:{int flag1;int i=0; while(1){flag1 = Pop(&S_Queue);if(flag1 == -1){printf("查看完毕完毕\n");	break;}else{printf("第%d 个患者病历号为: %d\n",++i,flag1);}}		}break;//	下班	case 8:printf("工作结束,打卡下班\n");exit(-1);		//	结束进程 default:printf("选择功能错误,请重新选择!!!!\n");break;}}return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261

学习笔记,欢迎交流,共同进步

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

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

相关文章

中班机器人教室设计方案_奇思妙想一起玩,机器人来了安格利亚东郡生态幼儿园亲子活动...

奇思妙想一起玩机器人总动员亲子活动课程起源有一天午休起床几个小女生正排队梳辫子&#xff0c;因为需要等待&#xff0c;孩子们比较无聊就在看教室的摆件&#xff0c;突然小朋友们就用机器人的语调开始对话&#xff0c;我听到后感觉很有意思也用机器人的语调和他们对话&#…

数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

摘自&#xff1a;数据结构学习——顺序栈和链式栈的简单实现和解析&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-11-26 21:26:49 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110205257 数据结构——栈的简单解…

c语言位运算负数的实例_0基础学习C语言第三章:位运算

C语言提供了六种位运算符&#xff1a;& 按位与| 按位或^ 按位异或~ 取反<< 左移&#xff0c;相当与*2>> 右移&#xff0c;正数高位补0&#xff0c;负数由计算机决定循环左移k次 (x<<k) | (x >> (32-k)),循环右移k次 (x>>k) | (x << (3…

phpMyAdmin 安装错误解决方法

为什么80%的码农都做不了架构师&#xff1f;>>> phpMyAdmin - Error Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are ena…

Harbo1.5.2离线搭建

环境说明 操作系统版本&#xff1a;Centos7.5 docker版本&#xff1a;docker-ce 17.03.2 harbor版本&#xff1a;v1.5.2 docker-compose: 1.22.0 基础环境搭建 系统优化 CentOS关闭selinux sudo sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/configsetenforce 0…

pca图解读_干货!手把手一步一步解读PCA分析,逃学博士尽力了!

01 引言之前发了几篇文章关于矩阵中 特征向量和PCA主元分析的文章&#xff0c;大家反响不错。当时并没有涉及到数学运算&#xff0c;只是大概讲了讲原理。这篇文章我们一起来一步一步解读PCA的计算过程如何用Python实现PCA分析准备就绪02 第一步&#xff1a;数据获取第一步&…

数据结构——二叉树根节点到特定节点路径(C语言版)

摘自&#xff1a;数据结构——二叉树根节点到特定节点路径&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-10 21:09:43 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110991771 二叉树——根节点到特定节点路径…

实用插件_精选 10 个非常实用的 VS Code 插件

来源&#xff1a;Daan原文&#xff1a;https://medium.com/better-programming/10-extremely-helpful-visual-studio-code-plugins-for-programmers-c8520a3dc4b8无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人员&#xff0c;你都会想让自己的开发工作尽可能轻…

数据结构——计算节点个数和二叉树高度(C语言版)

摘自&#xff1a;数据结构——计算节点个数和二叉树高度&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-12 23:27:09 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/111086664 数据结构——计算节点个数、二叉树…

写入接口c语言_PYNQ: 使用CFFI嵌入C语言

未经私信同意禁止转载&#xff01;前言CFFI是连接Python与c的桥梁&#xff0c;可实现在Python中调用c文件。CFFI为c语言的外部接口&#xff0c;在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数。Python运行比较低&#xff0c;尤其是操作字节流的时候&…

Unity 协程原理探究与实现

目录 一、介绍二、迭代器三、原理四、总结一、介绍 协程Coroutine在Unity中一直扮演者重要的角色。可以实现简单的计时器、将耗时的操作拆分成几个步骤分散在每一帧去运行等等&#xff0c;用起来很是方便。 但是&#xff0c;在使用的过程中有没有思考过协程是怎么实现的&#x…

数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历(C语言版)

摘自&#xff1a;数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-19 17:25:49 网址&#xff1a;https://blog.csdn.net/zhuguanlin121/article/details/118436142 无向图创建…

android 图片识别白色区域进行裁剪_【研途技能贴】| 4款好用的图片处理软件推荐...

要考研啦4款好用的图片处理软件推荐01入门级作图神器——图怪兽一款会打字就能用的在线编辑器&#xff0c;80万模板任君挑选~无论是基础的旋转裁剪&#xff0c;还是难度进阶的抠图拼图&#xff0c;在这款软件里&#xff0c;你可以分分钟做出高大上的好图&#xff01;Use tips①…

Android 开发(一)项目概况

2019独角兽企业重金招聘Python工程师标准>>> 开始写博客&#xff0c;自己是边学习边做开发&#xff0c;将自己开发的过程记录下来&#xff0c;能够对学习的知识进行梳理&#xff0c;也可以对学习做个总结。 首先是对项目的介绍&#xff1a; 做一个功能全面的软件&am…

github和dockerhub制作k8s镜像

一、前言&#xff1a; 对于初学者来说&#xff0c;k8s的镜像问题往往会将他们拦在学习门外&#xff0c;今天就白话一下k8s众多镜像的获取方式&#xff0c;前提只有一个&#xff1a;你能上百度。 二、github和dockerhub账号准备&#xff0c;这个没任何门槛&#xff0c;只要知道这…

数据结构——无向图创建邻接表以及深度遍历、广度遍历(C语言版)

摘自&#xff1a;数据结构——无向图创建邻接表以及深度遍历、广度遍历&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-22 20:55:12 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/111409503 数据结构——无向图…

C++轮子队-第三周(需求改进原型设计)

需求改进&原型设计 一.需求完善 &#xff08;一&#xff09;系统功能&#xff08;补充&#xff09; 图形界面&#xff08;图片如下图所示&#xff1a;&#xff09; 根据需求与组内讨论结果&#xff0c;现归纳图形界面方面需要的设计与相应功能&#xff1a; 数据-图形界面中…

Linux 从头学 01:CPU 是如何执行一条指令的?

摘自&#xff1a;Linux 从头学 01&#xff1a;CPU 是如何执行一条指令的&#xff1f; 作者&#xff1a;IOT物联网小镇 发布时间&#xff1a;2021-07-02 08:22:43 网址&#xff1a;https://blog.csdn.net/jchen1218/article/details/118404217?utm_sourceapp&app_version4.…

积极拥抱.NET Core开源社区

潘正磊在上海的Tech Summit 2018 大会上给我们的.NET Core以及开源情况带来了最新信息。 .Net Core 开源后取得了更加快速的发展&#xff0c;目前越活跃用户高达400万人&#xff0c;每月新增开发者45万&#xff0c;在 GitHub 上的月度增长达到15%。目前有来自超过3,700家企业的…

内存:你跑慢点行不行?CPU:跑慢点你养我吗?内存:我不管!(内附超全思维导图)

摘自&#xff1a;内存&#xff1a;你跑慢点行不行&#xff1f;CPU&#xff1a;跑慢点你养我吗&#xff1f;内存&#xff1a;我不管&#xff01;&#xff08;内附超全思维导图&#xff09; 作者&#xff1a;程序员cxuan 发布时间&#xff1a;2020-03-09 13:43:11 网址&#xff1…