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

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

数据结构——无向图创建邻接表以及深度遍历、广度遍历

  • 一、邻接表概念
  • 二、邻接表实现
    • (1)准备前提——结构体定义
    • (2)创建边链表
    • (3)打印边链表
    • (4)深度优先遍历
    • (5)广度优先搜索
    • (6)全部代码

一、邻接表概念

在无向图中,顶点存储在顶点表中,以一个顶点为标记,指向边链表,两者组合在一起,称为 邻接表

  1. 对无向图的每个顶点vi建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向图则是以顶点vi为尾的弧)。这个单链表就称为顶点vi的边表(对于有向图则称为出边表)
  2. 边表的头指针和顶点的数据信息采用顺序存储(称为顶点表)
  3. 邻接表中存在两种结点:顶点表结点和边表结点
  4. 顶点表结点由顶点域(data)和指向第一条邻接边的指针(firstarc)构成
  5. 边表(邻接表)结点由邻接点域(adjvex)和指向下一条邻接边的指针域(nextarc)构成

如图:

在这里插入图片描述

在这里插入图片描述

二、邻接表实现

具体样例

在这里插入图片描述

基本每一步,都有注释!!可认真看并理解!!!

(1)准备前提——结构体定义

#define MAXSIZE 100//深度遍历标记数组 
int DfsVist[MAXSIZE]; 
//广度遍历标记数组 
int BfsVist[MAXSIZE];//	边链表 
typedef struct EdgeLink{int Local;					//	存放该顶点对应边链表中数据 						 struct EdgeLink *next;		//	边链表节点指针  }Edge,*ELINK;//	顶点表 
typedef struct VertexLink{int Vertex;					//	存放一条边链表对应的顶点 ELINK FirstNode;			//	指向该顶点对应边链表的头节点 }Vertex[MAXSIZE],*VLINK;//	存放顶点和边,指向顶点表结构体数组 
typedef struct MyGraph{int Vnum;	//	存放顶点数 int Enum;	//	存放边数 Vertex List;	//	边链表对应的顶点表中顶点结构体 }MyGraph;
  • 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

(2)创建边链表

//	创建边链表
void CreateLink(MyGraph *T)
{int i,j;int v1,v2;ELINK p;		//	边链表指针 ELINK q;printf("请输入顶点数和边数(空格隔开):\n");scanf("%d%d",&(T->Vnum),&(T->Enum));//	初始化顶点表结构体数组 for(i=0;i<T->Vnum;i++){printf("请输入第%d个顶点的信息:\n",i+1);scanf("%d",&(T->List[i].Vertex));		//	存放顶点在顶点表中 T->List[i].FirstNode = NULL; 		//	让每个顶点表第一个指向边链表的指针为NULL }//	打印顶点坐标和顶点表中顶点数据 printf("---------------------------\n"); for(i=0;i<T->Vnum;i++){printf("顶点下标为:%d   顶点数据为: %d\n",i,T->List[i].Vertex); 	}printf("---------------------------\n");//	插入边链表数据	for(i=0;i<T->Enum;i++){//	因为顶点表为顺序表,所以要按顶点顺序输入相连边 printf("请输入两个连接顶点下标(空格隔开):\n");scanf("%d%d",&v1,&v2);getchar(); q = (ELINK)malloc(sizeof(Edge));	//	创建边链表节点,分配内存 q->Local = v2;	//	记录与该顶点连接边的顶点坐标q->next = NULL;						//	让尾巴指向NULL if(!T->List[v1].FirstNode){	//	判断是否为这个顶点第一个指向的数据 T->List[v1].FirstNode = q;}else{//	这个顶点已经指向了一条边,以这条边为头节点,尾插法 p = T->List[v1].FirstNode;	//	临时存放头节点 while(p->next)	//	让节点指针遍历到尾巴上 {p = p->next;}p->next = q;	//	让新插的节点连接到之前边节点的尾巴上 }q = (ELINK)malloc(sizeof(Edge));	//	创建边链表节点,分配内存 q->Local = v1;	//	记录与该顶点连接边的顶点坐标q->next = NULL;						//	让尾巴指向NULL if(!T->List[v2].FirstNode){	//	判断是否为这个顶点第一个指向的数据 T->List[v2].FirstNode = q;}else{//	这个顶点已经指向了一条边,以这条边为头节点,尾插法 p = T->List[v2].FirstNode;	//	临时存放头节点 while(p->next)	//	让节点指针遍历到尾巴上 {p = p->next;}p->next = q;	//	让新插的节点连接到之前边节点的尾巴上 }} }
  • 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

(3)打印边链表

//	打印邻接表 
void PrintLink(MyGraph *S) 
{MyGraph *T = S;ELINK Q;			//	防止边链表指针指到NULL ,用临时指针代替遍历打印 int i;printf("打印邻接表结果如下:\n");for(i=0;i<T->Vnum;i++){Q = T->List[i].FirstNode;	//	接受每个顶点指向对应边链表的头节点指针 printf("%d--->",i);while(1){if(Q == NULL)	//	指针指到尾巴 NULL{putchar('\n');break;}printf("------->%3d",Q->Local);Q = Q->next;	}}putchar('\n');
}
  • 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

(4)深度优先遍历

//*****************	深度优先遍历算法—邻接表 *****************//
void DFS_Link(MyGraph *T,int n)
{	int i,j;ELINK q;	//	指向边链表节点指针 if(n<0 || n>=T->Vnum){printf("输入有误\n");return;	}DfsVist[n] = 1;		//	遍历一个顶点,做下标记 1  printf(" %d",T->List[n].Vertex);q = T->List[n].FirstNode;	//q指向下标为i所对顶点 对应的边链表的第一个边结点	while(q!=NULL)	{	if(DfsVist[q->Local]!=1){j = q->Local;DFS_Link(T,j);} q = q->next;}} 
//	初始化深度遍历—邻接表 
void Init_DFSLINK(MyGraph *Q)
{int i;for(i=0;i<Q->Vnum;i++){DfsVist[i] = 0;}for(i=0;i<Q->Vnum;i++){if(!DfsVist[i]){DFS_Link(Q,i);	//	此顶点没有被标记,开始递归遍历}}putchar('\n'); }
  • 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

(5)广度优先搜索

//	广度遍历 
void BFS(MyGraph *S,int t)
{ELINK P; 			//	指向顶点所对应的边链表中 int i;int v;		//	用来接收边链表对应的顶点//	创建一个数组队列 int Queue[MAXSIZE];int front = 0;			//	队头 int rear = 0;			//	队尾 printf("%d ",S->List[t].Vertex);	//	输出当前遍历边链表的顶点 BfsVist[t] = 1;		//	将该顶点作标记rear = (rear+1)%MAXSIZE;	//	入队一个让队尾指向后移一位Queue[rear] = t;	 		//	将该顶点入队 while(front != rear)	//	若front == rear,表明这个顶点在边链表上连接的顶点已经遍历完毕 {front = (front+1)%MAXSIZE;		//	出队 v = Queue[front];			//	得到此时遍历到顶点坐标 P = S->List[v].FirstNode;	//	遍历当前顶点指向边链表中连接的其他顶点//	也就是换个顶点的边链表继续遍历查找剩余顶点 while(P!=NULL){if(BfsVist[P->Local] == 0){			printf("%d ",P->Local+1);	//	输出连接边顶点 BfsVist[P->Local] = 1;		//	作标记,表示这个顶点已经搜索过 rear = (rear+1)%MAXSIZE;		//	将该下标入队 Queue[rear] = P->Local;	//	把遍历到新的边链表对应的顶点坐标入队 }P = P->next;	//	遍历这个顶点的边链表 }	} 
} //	BFS广度遍历初始化
void Init_BFS(MyGraph *S)
{int i;for(i=0;i<S->Vnum;i++){BfsVist[i] = 0;	//	初始化标记符 }for(i=0;i<S->Vnum;i++){if(BfsVist[i]==0)BFS(S,i);}} 
  • 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

(6)全部代码

#include<stdio.h>
#include<stdlib.h>#define MAXSIZE 100//深度遍历标记数组 
int DfsVist[MAXSIZE]; 
//广度遍历标记数组 
int BfsVist[MAXSIZE];//	边链表 
typedef struct EdgeLink{int Local;					//	存放该顶点对应边链表中数据 						 struct EdgeLink *next;		//	边链表节点指针  }Edge,*ELINK;//	顶点表 
typedef struct VertexLink{int Vertex;					//	存放一条边链表对应的顶点 ELINK FirstNode;			//	指向该顶点对应边链表的头节点 }Vertex[MAXSIZE],*VLINK;//	存放顶点和边,指向顶点表结构体数组 
typedef struct MyGraph{int Vnum;	//	存放顶点数 int Enum;	//	存放边数 Vertex List;	//	边链表对应的顶点表中顶点结构体 }MyGraph;//	创建边链表
void CreateLink(MyGraph *T)
{int i,j;int v1,v2;ELINK p;		//	边链表指针 ELINK q;printf("请输入顶点数和边数(空格隔开):\n");scanf("%d%d",&(T->Vnum),&(T->Enum));//	初始化顶点表结构体数组 for(i=0;i<T->Vnum;i++){printf("请输入第%d个顶点的信息:\n",i+1);scanf("%d",&(T->List[i].Vertex));		//	存放顶点在顶点表中 T->List[i].FirstNode = NULL; 		//	让每个顶点表第一个指向边链表的指针为NULL }//	打印顶点坐标和顶点表中顶点数据 printf("---------------------------\n"); for(i=0;i<T->Vnum;i++){printf("顶点下标为:%d   顶点数据为: %d\n",i,T->List[i].Vertex); 	}printf("---------------------------\n");//	插入边链表数据	for(i=0;i<T->Enum;i++){//	因为顶点表为顺序表,所以要按顶点顺序输入相连边 printf("请输入两个连接顶点下标(空格隔开):\n");scanf("%d%d",&v1,&v2);getchar(); q = (ELINK)malloc(sizeof(Edge));	//	创建边链表节点,分配内存 q->Local = v2;	//	记录与该顶点连接边的顶点坐标q->next = NULL;						//	让尾巴指向NULL if(!T->List[v1].FirstNode){	//	判断是否为这个顶点第一个指向的数据 T->List[v1].FirstNode = q;}else{//	这个顶点已经指向了一条边,以这条边为头节点,尾插法 p = T->List[v1].FirstNode;	//	临时存放头节点 while(p->next)	//	让节点指针遍历到尾巴上 {p = p->next;}p->next = q;	//	让新插的节点连接到之前边节点的尾巴上 }q = (ELINK)malloc(sizeof(Edge));	//	创建边链表节点,分配内存 q->Local = v1;	//	记录与该顶点连接边的顶点坐标q->next = NULL;						//	让尾巴指向NULL if(!T->List[v2].FirstNode){	//	判断是否为这个顶点第一个指向的数据 T->List[v2].FirstNode = q;}else{//	这个顶点已经指向了一条边,以这条边为头节点,尾插法 p = T->List[v2].FirstNode;	//	临时存放头节点 while(p->next)	//	让节点指针遍历到尾巴上 {p = p->next;}p->next = q;	//	让新插的节点连接到之前边节点的尾巴上 }} }//	打印邻接表 
void PrintLink(MyGraph *S) 
{MyGraph *T = S;ELINK Q;			//	防止边链表指针指到NULL ,用临时指针代替遍历打印 int i;printf("打印邻接表结果如下:\n");for(i=0;i<T->Vnum;i++){Q = T->List[i].FirstNode;	//	接受每个顶点指向对应边链表的头节点指针 printf("%d--->",i);while(1){if(Q == NULL){putchar('\n');break;}printf("------->%3d",Q->Local);Q = Q->next;	//!!BUG }}putchar('\n');
}//*****************	深度优先遍历算法—邻接表 *****************//
void DFS_Link(MyGraph *T,int n)
{	int i,j;ELINK q;	//	指向边链表节点指针 if(n<0 || n>=T->Vnum){printf("输入有误\n");return;	}DfsVist[n] = 1;		//	遍历一个顶点,做下标记 1  printf(" %d",T->List[n].Vertex);q = T->List[n].FirstNode;	//q指向下标为i所对顶点 对应的边链表的第一个边结点	while(q!=NULL)	{	if(DfsVist[q->Local]!=1){j = q->Local;DFS_Link(T,j);} q = q->next;}} 
//	初始化深度遍历—邻接表 
void Init_DFSLINK(MyGraph *Q)
{int i;for(i=0;i<Q->Vnum;i++){DfsVist[i] = 0;}for(i=0;i<Q->Vnum;i++){if(!DfsVist[i]){DFS_Link(Q,i);	//	此顶点没有被标记,开始递归遍历}}putchar('\n'); }//	广度遍历 
void BFS(MyGraph *S,int t)
{ELINK P; 			//	指向顶点所对应的边链表中 int i;int v;		//	用来接收边链表对应的顶点//	为了不和广度搜素—邻接矩阵冲突//	创建一个数组队列 int Queue[MAXSIZE];int front = 0;			//	队头 int rear = 0;			//	队尾 printf("%d ",S->List[t].Vertex);	//	输出当前遍历边链表的顶点 BfsVist[t] = 1;		//	将该顶点作标记rear = (rear+1)%MAXSIZE;	//	入队一个让队尾指向后移一位Queue[rear] = t;	 		//	将该顶点入队 while(front != rear)	//	若front == rear,表明这个顶点在边链表上连接的顶点已经遍历完毕 {front = (front+1)%MAXSIZE;		//	出队 v = Queue[front];			//	得到此时遍历到顶点坐标 P = S->List[v].FirstNode;	//	遍历当前顶点指向边链表中连接的其他顶点//	也就是换个顶点的边链表继续遍历查找剩余顶点 while(P!=NULL){if(BfsVist[P->Local] == 0){			printf("%d ",P->Local+1);	//	输出连接边顶点 BfsVist[P->Local] = 1;		//	作标记,表示这个顶点已经搜索过 rear = (rear+1)%MAXSIZE;		//	将该下标入队 Queue[rear] = P->Local;	//	把遍历到新的边链表对应的顶点坐标入队 }P = P->next;	//	遍历这个顶点的边链表 }	} 
} //	BFS广度遍历初始化
void Init_BFS(MyGraph *S)
{int i;for(i=0;i<S->Vnum;i++){BfsVist[i] = 0;	//	初始化标记符 }for(i=0;i<S->Vnum;i++){if(BfsVist[i]==0)BFS(S,i);}} int main()
{MyGraph *S;S = (MyGraph *)malloc(sizeof(MyGraph));//	创建边链表 CreateLink(S);//	打印边链表 PrintLink(S);//	深度遍历Init_DFSLINK(S); //	广度遍历 Init_BFS(S);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
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287

运行结果:
在这里插入图片描述

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

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

相关文章

python抽象类的实现_python 抽象类、抽象方法的实现

由于python 没有抽象类、接口的概念&#xff0c;所以要实现这种功能得abc.py 这个类库,具体方式如下from abc import ABCMeta, abstractmethod#抽象类class Headers(object):__metaclass__ ABCMetadef __init__(self):self.headers abstractmethoddef _getBaiduHeaders(self)…

全文检索技术介绍与使用方法

全文检索技术ElasitcSearch介绍&#xff1a;http://www.javacodegeeks.com/2013/04/getting-started-with-elasticsearch.html全文检索技术Elasticsearch的使用介绍&#xff1a;http://www.cnblogs.com/dennisit/archive/2013/04/08/3008631.htmlIBM职员对ElasticSearch的认识&…

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.…

python题目推荐_python题目

#1~100的奇数和&#xff0c;偶数和sum 0n 99while n > 0:sum sum nn n - 2print(sum)i1sum0while i<100:if i%20:sumii1else:i1print(sum)#偶数sum0for i in range(1,101):if i%20:sumiprint(sum)#奇数sum10for i in range(1,101):if i%2!0:sum1iprint(sum1)print(s…

两个主机通信过程

主机A与主机B通信,A Ping B,图:A-交换机-B,AB同一子网(1)ping数据包用的是ICMP协议&#xff0c;IP协议的一个子协议&#xff0c;位于三层&#xff0c;包含A的IP&#xff0c;B的IP,三层进行IP封装成包,进入二层(2)A,B处于相同子网,查看缓存中对与目的对应得B第2层mac地址,如果存…

积极拥抱.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…

过期时间_2020年最新航空里程过期时间及避免过期方法总结

【2020.2 更新】近几年来主要有如下变化&#xff1a;UA 里程永不过期了&#xff0c;Southwest 里程永不过期了&#xff0c;Asia Miles 里程可以通过里程变动续命了&#xff0c;Flying Blue 里程变成24个月过期了&#xff0c;AV 里程变成12个月过期了。各大航空的里程过期政策辛…

Spring Boot 5:应用程序启动时初始化资源

需求&#xff1a;应用程序启动后&#xff0c;初始化基础数据、加密证书等操作。 可以使用CommandLineRunner接口来实现&#xff0c;在SpringBoot.run()之后完成资源的初始化工作。 注意&#xff1a;多个Runner需要顺序启动的话&#xff0c;可以使用Order注解 package sun.flowe…

怎么用python读取大文件_使用Python读取大文件的方法

背景准备试一试:f 开放(\u201C\/道路\/ \/文件\u201D,\u201Cr\u201D)打印()最后:如果f:()调用读()将读取所有文件的内容,如果文件有10 g,记忆会破灭,所以,为了安全起见,你可以反复调用read(大小)方法,每次最多读字节大小。此外,调用readline()一次读取一行,叫readline()阅读所有…

#10172. 「一本通 5.4 练习 1」涂抹果酱 题解

题目链接 一道三进制状压的好题。 题目描述: Tyvj 两周年庆典要到了&#xff0c;Sam 想为 Tyvj 做一个大蛋糕。蛋糕俯视图是一个 NM的矩形&#xff0c;它被划分成 NM个边长为 11的小正方形区域&#xff08;可以把蛋糕当成 N 行 M 列的矩阵&#xff09;。蛋糕很快做好了&#x…

全国计算机等级考试题库二级C操作题100套(第89套)

第89套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:求出形参ss所指字符串数组中最长字符串的 长度&#xff0c;其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共 有M个字符串&#xff0c;且串长<N。 请在程序的下划线处填入正确的内容并把下划线…

Android 调用相册 拍照 实现系统控件缩放 切割图片

android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家。 package cn.m15.test;import java.io.ByteArrayOutputStream; import java.io.File; import android.app.Activity; import android.content.Intent; import a…

全国计算机等级考试题库二级C操作题100套(第88套)

第88套&#xff1a; 函数fun的功能是&#xff1a;把形参a所指数组中的最大值放在a[0]中&#xff0c;接着求出a所指数组中的最小值放在a[1]中&#xff1b;再把a所指数组元素中的次大值放在a[2]中&#xff0c;把a数组元素中的次小值放在a[3]中&#xff1b;其余以此类推。例如:若…

75: libreoj #10028 双向宽搜

$des$ 实现一个bfs $sol$ 写了一个双向bfs #include <bits/stdc.h>using namespace std;#define Rep(i, a, b) for(int i a; i < b; i )#define gc getchar() inline int read() {int x 0; char c gc;while(c < 0 || c > 9) c gc;while(c > 0 &&…

《MS SQL Server 2000管理员手册》系列——8. 管理 Microsoft SQL Server 服务

8. 管理 Microsoft SQL Server 服务SQL Server 服务组件 使用SQL Server服务管理员使用 Windows 2000 服务控制管理员使用 SQL Server Enterprise Manager本章总结当您安装好 Microsoft SQL Server 2000 之后就可以开始执行了。在使用Microsoft SQL Server 2000 存取数据前&…

中的 终端报错怎么看原因_《琅琊榜》中太子被封禁,高湛引皇上看桂花的真正原因是什么?...

《琅琊榜》中&#xff0c;高湛是一个非常经典的角色&#xff0c;他比夏江更懂梁帝的心&#xff0c;或者说&#xff0c;知梁帝者&#xff0c;莫过于高湛。当然&#xff0c;若不是如此&#xff0c;高湛也不能在梁帝身边待了那么些年。梁帝生病&#xff0c;喝下静妃娘娘配制的甜汤…

js获取当前域名、Url、相对路径和参数以及指定参数

用 Javascript 可以单独获取当前域名、Url、相对路径和参数&#xff0c;所谓单独攻取&#xff0c;即域名不包括网页文件的路径和参数、参数不包括域名和网页文件路径&#xff0c;下面分别介绍。 一、js获取当前域名有2种方法 1、方法一 var domain document.domain; 2、方法二…

STM32安装Keil5、芯片支持包、startup启动文件(启动过程、冷热启动)、建立工程、ST-LINK烧写步骤

参考&#xff1a;stm32入门之keil5的安装以及第一个工程的建立 作者&#xff1a;SKY丶丿平才 发布时间&#xff1a; 2020-12-06 17:08:30 网址&#xff1a;https://blog.csdn.net/weixin_48264057/article/details/110734596 目录使用的STM32F103C8T6一、Keil5的下载与安装1.下…