完整源码获取:
微信关注:嵌入式开发圈
发送"链表"即可获取。
在这里插入图片描述

为什么要学习链表?

链表主要有以下几大特性:

1、解决数组无法存储多种数据类型的问题。

2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。

3、数组移动元素的过程中,要对元素进行大范围的移动,很耗时间,效率也不高。

先来感性的认识一下链表,我们先来认识下简单的链表:

从这幅图我们得出以下信息:

这个简单链表的构成:

头指针(Header),若干个节点(节点包括了数据域和指针域),最后一个节点要指向空。

实现原理:头指针指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表。

接下来看看链表的数据结构:

struct  list_node
{int data ; //数据域,用于存储数据struct list_node *next ; //指针,可以用来访问节点数据,也可以遍历,指向下一个节点
};

那么如何来创建一个链表的一个节点呢?

我们写个程序演示一下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct  list_node
{int data ; struct list_node *next ;
};typedef struct list_node list_single ; 	int main(void)
{list_single *node = NULL ;          //1、首先,当然是定义一个头指针node = (list_single *)malloc(sizeof(list_single)); //2、然后分配内存空间if(node == NULL){printf("malloc fair!\n");}memset(node,0,sizeof(list_single)); //3、清一下node->data = 100 ;		    		//4、给链表节点的数据赋值node->next = NULL ;                 //5、将链表的指针域指向空printf("%d\n",node->data);free(node);return 0 ;
}

那么,这仅仅只是创建一个链表中的一个节点,为了好看,我们把创建节点封装成函数,以后想创建多少个节点,我们就可以反复调用一个函数来创建,会很方便:

list_single *create_list_node(int data)
{list_single *node = NULL ;node = (list_single *)malloc(sizeof(list_single));if(node == NULL){printf("malloc fair!\n");}memset(node,0,sizeof(list_single));node->data = 100 ;node->next = NULL ;return node ;
}

接下来在程序上完成的程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct  list_node
{int data ; struct list_node *next ;
};typedef struct list_node list_single ; 	
list_single *create_list_node(int data)
{list_single *node = NULL ;node = (list_single *)malloc(sizeof(list_single));if(node == NULL){printf("malloc fair!\n");}memset(node,0,sizeof(list_single));node->data = data;node->next = NULL ;return node ;
}
int main(void)
{int data = 100 ;list_single *node_ptr = create_list_node(data); //创建一个节点printf("node_ptr->data=%d\n",node_ptr->data);   //打印节点里的数据printf("node_ptr->next=%d\n",node_ptr->next);  free(node_ptr);return 0 ;
}

执行结果 :



这样我们就完成一个链表节点的创建了,那么它现在的样子如下图:

链表的结构里,数据存储了100,因为这个链表只有一个节点,所以它的指针域指向了NULL。

   上面只是建立一个单链表的基本雏形,接下来咱们再来增加一点难度。如果创建多个单链表节点,实现单链表的增删改查?把单链表应用起来。

1、首先定义一个单链表的数据结构

创建节点函数原型可定义如下:
struct list *create_node(int data) ;
如何创建单链表的节点,主要分以下步骤:
(1)给当前的每个节点的数据结构配置定量的空间大小
ep : struct list *node = malloc(sizeof(struct list));
(2)清节点数据(由于结构体变量在未初始化的时候,数据是脏的)
ep : memset(node,0,sizeof(struct list));
(3)给节点初始化数据
ep : node->id = data ; 
(4)将该节点的指针域设置为NULL
ep : node->next = NULL ;

2、单链表的尾插:

尾插节点函数原型可定义如下:

如何将当前链表和新的节点相连接?只要实现:
header->next = new 
尾插流程如下:

(1)获取当前节点的位置,也就是访问头节点
ep : struct list *p = header ;
(2)判断是否为最后一个节点,如果不是,移动到下一个节点,如果是,将数据插入尾部。
ep : while(NULL != p->next) p = p->next ;
p->next = new ;

3、单链表的头插

很好理解,头插就是把新的节点插在原来的节点和原来节点的下一个节点之间的一个节点。如图,新的节点插在头节点和节点1。
所以可以推出头插流程如下:
(1)获取当前节点的位置,也就是访问头节点
ep : struct list *p = header ;
(2)新的节点的下一个节点设置为原来头节点的下一个节点(第一个节点)
ep : new->next = p->next ;
(3)原来的头节点的下一个节点设置为现在新插入的头节点
ep : p->next = new ;

4、单链表的遍历

如图为一条单向链表的模型,看图知道该链表由头节点和若干个节点组成,最后一个节点(尾节点)为NULL 。
从图中可以得出信息,如果我们要打印出各个节点的数据,要考虑以下问题:
(1)需要打印头节点吗?(头节点肯定是不用打印的,因为这是我们为了操作方便而设置的一个节点)。
(2)这条链表有多少个节点我们怎么知道?(通过判断该链表是否已经到达了尾节点,标志就是NULL)
那么可以得到流程如下:
(1)获取当前节点的位置,也就是访问头节点
ep : struct list *p = header ;
(2)由于头节点我们不需要去打印它,这时候,初始化打印的节点需要从第一个节点开始。
ep : p = p->next ;  
(3)判断是否为最后一个节点,如果不是,先打印第一个节点的数据(1),然后移动到下一个节点(2),重复这两个步骤。
如果是最后一个节点,直接打印数据即可。
while(NULL != p->next){ printf("node:%d\n",p->data) ; p = p->next ;}
printf("node:%d\n",p->data);
当然还可以一句代码解决,这样就达到了先偏移,后取数据。
while(NULL != p->next){ p = p->next ; printf("node:%d\n",p->data) ; }

5、单链表的删除

删除节点的函数原型可定义如下:
int detele_list_node(struct list *pH , int data);
单向链表的删除要考虑两种情况,一种的普通节点的删除(当然,头节点不能算)
还有一种是尾节点的前一个节点的删除情况,注意,删除完节点还需要释放对应节点的内存空间。

删除节点的设计流程:
(1)先定义两个指针,一个表示当前的节点,另一个表示当前节点的上一个节点。
ep : struct list *p = header ;  //当前节点
struct list *prev = NULL ; //当前节点的上一个节点
(2)遍历整个链表,同时保存当前节点的前一个节点
ep : while(NULL != p->next)

//保存了当前的节点的前一个节点
prev = p ;  
//保存当前偏移的节点
p = p->next ; 
return 0 ;
}
(3)在遍历的过程中查找要删除的数据
ep : while(NULL != p->next)

//保存了当前的节点的前一个节点
prev = p ;  
//保存当前偏移的节点
p = p->next ; 
//查找到了数据
if(p->id == data)
{

}
return 0 ;
}
(4)查找到了数据后,分两种情况删除
ep : 普通节点的删除
if(p->id == data)
{
prev->next = p->next ;
free(p);
}
ep : 考虑尾节点的下一个节点为NULL的节点删除
if(p->id == data)
{
if(p->next == NULL)
{
prev->next = NULL ;
free(p);
}
}

6、单链表的逆序

逆序步骤:

单链表的基本操作流程咱们基本搞懂了,下面写一个程序,这将会变得非常非常的简单。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct slist
{int id ;struct slist *next ;			
}L;//创建一个节点 
L *create_node(int data)
{//给每个节点分配结构体一样的空间大小 L *p = malloc(sizeof(L));if(NULL == p){printf("malloc error!\n");return NULL ;}//由于结构体在未初始化的时候一样是脏数据,所以要清 memset(p,0,sizeof(L));//初始化第一个节点 p->id = data ; //将节点的后继指针设置为NULL p->next = NULL ;
}//链表的尾插 
void tail_insert(L *pH , L *new)
{//获取当前的位置 L *p = pH ; //如果当前位置的下一个节点不为空 while(NULL != p->next){//移动到下一个节点 p = p->next ;}//如果跳出以上循环,所以已经到了NULL的这个位置//此时直接把新插入的节点赋值给NULL这个位置 p->next = new ;
}//链表的头插 
void top_insert(L *pH , L *new)
{L *p = pH ;new->next = p->next ;p->next = new ;
}//链表的遍历 
void Print_node(L *pH)
{//获取当前的位置 L *p = pH ;//获取第一个节点的位置 p = p->next ;//如果当前位置的下一个节点不为空 while(NULL != p->next){//(1)打印节点的数据 printf("id:%d\n",p->id);//(2)移动到下一个节点,如果条件仍为真,则重复(1),再(2) p = p->next ;}//如果当前位置的下一个节点为空,则打印数据//说明只有一个节点 printf("id:%d\n",p->id);
}//删除链表中的节点 
int detele_list_node(L * pH , int data)
{//获取当前头节点的位置 L *p = pH ;L *prev = NULL;while(NULL != p->next){//保存当前节点的前一个节点的指针 prev = p ;//然后让当前的指针继续往后移动 p = p->next ; 	//判断,找到了要删除的数据  if(p->id == data){//两种情况,一种是普通节点,还有一种是尾节点if(p->next != NULL)  //普通节点的情况 {prev->next = p->next ;free(p);}else //尾节点的情况 {prev->next = NULL ; //将这个尾节点的上一个节点的指针域指向空 free(p); }return 0  ;}}printf("没有要删除的节点\n");return -1 ;
}void trave_list(L * pH)
{//保存第一个节点的位置 L *p = pH->next;L *pBack;int i = 0 ;if(p->next == NULL || p == NULL)return ;while(NULL != p->next) //遍历链表 {//保存第一个节点的下一个节点 pBack = p->next ; //找到第一个有效节点,其实就是头指针的下一个节点 if(p == pH->next) {//第一个有效节点就是最后一个节点,所以要指向NULL p->next = NULL ; } else{/*new->next = p->next ;p->next = new ;*/p->next = pH->next ; //尾部连接 }pH->next = p ; //头部连接 p = pBack ; //走下一个节点 }top_insert(pH,p); //插入最后一个节点 
}int main(int argc , char **argv) 
{//创建第一个节点 int i ;L *header = create_node(0); for(i = 1 ; i < 10 ; i++){tail_insert(header,create_node(i));}Print_node(header);detele_list_node(header,5);putchar('\n');Print_node(header);putchar('\n');trave_list(header);Print_node(header);return 0 ;
}

运行结果:

当然,单链表存在一定的弊端,就是查找数据和删除数据的时候比较麻烦,而双链表的出现就是为了解决它的弊端:

双链表的引入是为了解决单链表的不足:
(1)双链表可以往前遍历,也可以往后遍历,具有两个方向
双链表的节点 = 有效数据 + 两个指针(分别指向前一个节点和后一个节点)
双向链表的图形结构描述:

struct double_list                                   struct double_list
{                                                            {
数据域;                  ep :------->                   int data ;
指针域(前向指针) ;                                   struct double_list *prev ;
指针域(后向指针) ;                                   struct double_list *next ;
};                                                             };

1、双向链表的创建

struct list *create_node(int data) ;
创建步骤(与单链表类似,就是多了一个指针):
(1)给节点申请空间:
ep : struct double_list *p = malloc(sizeof(struct double_list));
(2)初始化数据域
ep : p->data = data ;
(3)初始化指针域
ep : p->prev = NULL ; 
p->next = NULL ;

2、双向链表的尾插

双向链表尾插节点的函数可以定义如下:
void double_list_tail_insert(struct double_list *header , struct double_list *new) ;
尾插图示操作:

尾插的步骤:


(1)找到链表的尾节点
ep : 和单链表差不多
DL *p = header ;
while(NULL != p->next)
p = p->next ;
(2)将新的节点连接到尾节点的后面成为新的节点
1.原来的next指针指向新节点的首地址。            p->next = new ;
2.新节点的prev指针指向原来的尾节点的首地址。 new->prev = p;

3、双向链表的头插

双向链表头插节点的函数可以定义如下:
void double_list_top_insert(struct double_list *header , struct double_list *new) ;

4、双向链表的遍历

4.1 正向遍历
void double_list_for_each(DL *header)
步骤:和单链表完全一致,没什么好写的。


4.2 反向遍历
void double_list_for_each_nx(DL *header)
步骤:(1)和单链表一样,先循环找到最后一个节点的地址
(2)再依靠prev指针循环往前移动
2.1 先打印最后一个数据  ep : printf("%d ",p->data);
2.2 向前循环遍历         ep : p = p->prev ;

判断条件:header->prev != p->prev,
header保存的是头节点的地址,
header->prev保存的是头节点的prev的地址,
header->next保存的是头节点的next的地址,
头节点在创建的时候:
header->prev = NULL ;
header->next = NULL ;
所以这个条件这样写header->prev = NULL也是对的。

5、双向链表节点的删除


假设需要删除节点1:    
首先:
(1)获取当前节点的地址: 
ep : p = header;
(2)遍历所有的节点,找到要删除的节点:
ep : 
while(NULL != p->next)
{
p = p->next ;
if(p->data == data)
{

}
}
(3)找到要删除的数据以后,需要做判断,判断两种情况,这和单链表差不多
3.1 如果找到当前节点的下一个节点不为空
3.1.1    
那就把当前节点的prev节点指向要删除的这个节点的prev
因为当前的prev节点保存的是要删除的上一个节点的指针 
p->next->prev = p->prev ;
3.1.2    
然后将当前节点的prev指针(也就是上一个节点的指针)指向当前节点(要删除的)的下一个节点:
p->prev->next = p->next ;
3.1.3    
最后释放删除指针的空间:
free(p);

3.2 如果找到当前节点的下一个节点为空
3.2.1   
直接把当前指针(要删除的节点)的prev指针(保存着当前指针的上一个节点的地址)的下一个next指针设置为空。
p->prev->next = NULL ;
3.2.2
将删除的指针的空间释放:
free(p);
看来,双链表学起来比单链表容易多了!确实啊,多了一个方向,操作起来就更加容易了,但是多了一个方向,一维多了一个指针,相比增加了一定的复杂度,但是,只要牢记prev指针和next指针的指向,那么,手画一图,代码即可写出!
下面给一个案例实现一下双向链表:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//创建一个双链表的数据结构
typedef struct __double_list
{int data ;struct __double_list *prev ;struct __double_list *next ;
}DL ; //创建双向链表并插入一个节点 
DL *create_dl_node(int data)
{DL *p = malloc(sizeof(DL));if(NULL == p){printf("create dl node fair!\n");return NULL ;}//初始化数据 p->data = data ;//初始化指针 p->next = NULL ;p->prev = NULL ;
}//双向链表的尾插 
void double_list_tail_insert(DL *header , DL *new)
{//取得当前节点的地址 DL *p = header ;//找到链表的尾节点 while(NULL != p->next){//找不到接着找 p = p->next ;}//找到了尾节点,指向新节点的首地址 p->next = new ;//新节点的prev指针指向原来的尾节点的首地址。new->prev = p;
}//双向链表的头插(也就是插在两个节点之间的插入方式)
void double_list_top_insert(DL *header , DL *new)
{//新节点的next指针指向原来的节点一的地址new->next = header->next ; //判断当前节点的下一个节点的地址是否为空if(NULL != header->next) header->next->prev = new ; //节点1的prev指针指向新节点的地址 header->next = new ;new->prev = header ;
}//双向链表的正向遍历 
void double_list_for_each(DL *header)
{DL *p = header ;while(NULL != p->next){p = p->next ;printf("%d ",p->data);}
}//双向链表的反向遍历 
void double_list_for_each_nx(DL *header)
{DL *p = header ;//先找到尾节点while(NULL != p->next){p = p->next ;	} //已经找到了尾节点,向前遍历,注意,遍历到头节点之前//限制条件: != 头结点 while(NULL != p->prev){printf("%d ",p->data);p = p->prev ;}
}//双向链表节点的删除
int double_list_delete_node(DL *header , int data)
{//取得当前节点 DL *p = header;//遍历所有的节点 while(NULL != p->next){p = p->next ;//找到了对应要删除的数据了 if(p->data == data){//一样存在两种情况//(1)当前节点的下一个节点不为空if(p->next != NULL){//那就把当前节点的prev节点指向要删除的这个节点的prev//因为当前的prev节点保存的是要删除的上一个节点的指针 p->next->prev = p->prev ;//还要指定它的next节点 p->prev->next = p->next ;free(p);}//(2)当前节点的下一个节点为空 else{//把 p->prev->next = NULL ;free(p); }return 0 ;}}printf("\n没有找到对应要删除的节点,或者节点已经被删除!\n");return -1 ;	
} int main(void)
{int i ;DL *header = create_dl_node(0);for(i = 0 ; i < 10 ; i++){//双向链表的尾插 //double_list_tail_insert(header,create_dl_node(i));//双向链表的头插 double_list_top_insert(header,create_dl_node(i));}//双向链表的正向遍历 printf("双向链表的正向遍历:");double_list_delete_node(header,5);double_list_for_each(header);
//	double_list_delete_node(header,9);double_list_delete_node(header,5);putchar('\n');printf("双向链表的反向遍历:");double_list_for_each_nx(header);return 0 ;
}

运行结果:

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

相关文章

  1. Ruby on Rails 教程

    原书名:Ruby on Rails Tutorial作者:[美] Michael Hartl译者:Andor ChenRuby:2.0.0Rails:4.0售价:$4.90页数:460装帧:电子书格式:PDF, ePub, Mobi, HTML 购买电子书 购买电子书($4.90) 出售行为已获原作者许可;只支持 Paypal 支付;电子书包含三种格式:PDF、EPub …...

    2024/4/30 3:47:54
  2. C#执行bat脚本不出现黑框框的方法

    c#执行bat脚本,会出现黑框框,需要人工干预。只需要使用下面两行代码便会以静默方式执行bat脚本了。proc.StartInfo.CreateNoWindow = true;//启动该进程而不创建包含它的新窗口 proc.StartInfo.UseShellExecute = false;//直接从可执行文件创建进程,不使用 shell完整代码如下…...

    2024/4/29 23:44:14
  3. delphi 中 image 控件加载bmp、JPG、GIF、PNG等图片的办法

    [delphi] viewplain copyprocedure TForm1.Button1Click(Sender: TObject); var jpg: TJPEGImage; // 要use Jpeg单元 begin // 显示jpg大图片的方式 jpg := TJPEGImage.Create; jpg.LoadFromFile(getcurrentdir() + \pic.jpg); Image1.Picture.Bitmap.Assign(jpg); /…...

    2024/5/6 10:04:31
  4. 转载 Ruby学习资源

    Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,它可以使您方便快捷地进行面向对象编程,也可以进行普通的面向过程编程,她语法简单,还有异常处理以及迭代器等构造,使编程变得简单明了。本文档吸纳Ruby的精品教程供大家分享。 资源名称 …...

    2024/4/20 21:11:03
  5. STM32常用C语言基础知识点

    1.位操作 C语言支持下列6种位操作符 .&:按位与 .| : 按位或 .^ : 按位异或 .~:取反 .<<:左移 .>>:左移 注:操作符不包括左小角的小点,请忽略小点 2.define 宏定义 define是C语言种的预处理命令,可以提高源代码的可读性,为编程提供方便。 常见格式: …...

    2024/4/20 21:11:03
  6. C# Process的简单使用方法

    //调用middleware目录下的middleware.exe,并等待该程序执行结束Process p = new Process();p.StartInfo.FileName = midServerPath(serverMidFilePath, false) + @"\middleware.exe";//设定程序名 p.StartInfo.UseShellExecute = false;//Shell的使用p.StartInfo.Cr…...

    2024/4/20 21:11:01
  7. 单片机视频教程转让

    单片机的C语言视频教程转让,本套光盘购于天祥电子,花了我200大元,如今我以60元(包快递)的价格转让。有意者请与我联系。 QQ:247964971 电话:13982129248 讲座从最基本电路知识开始讲起,非常详细的讲解KEIL编译器的使用,课程全部用单片机的C语言讲解,从C语言的第一个…...

    2024/5/1 22:58:46
  8. HTML控件和Web控件的区别和联系

    在ASP.NET中,使用了两类控件,一类是HTML控件(又分为HTML控件和HTML服务器控件),还有一类是WEB控件。 从以下几个方面来了解他们的区别和联系 一:概念HTML控件:就是我们通常的说的html语言标记,这些语言标记在已往的静态页面和其他网页里存在,不能在服务器端控制的,只能…...

    2024/5/2 0:22:03
  9. C#程序调用cmd执行命令-MySql备份还原

    1.简单实例//备份还原mysql public static void TestOne() {Process p = new Process();p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.…...

    2024/4/20 23:57:16
  10. ZetCode Ruby 教程

    来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0贡献指南 本项目需要校对,欢迎大家提交 Pull Request。请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经…...

    2024/5/1 23:18:52
  11. C#Process的OutputDataReceived事件不触发的解决方法

    问题描述: 项目需要用cmd调用其它软件,实时获取软件处理结果,并根据获取到的结果决定下一步的输出,代码如下: Process proCmd = null; proCmd = new Process(); proCmd.StartInfo.FileName = "cmd.exe"; //cmd proCmd.StartInfo.UseShellExecute …...

    2024/5/1 22:22:36
  12. 郝斌C语言视频教程

    课程简介: 这部郝斌c语言自学教程共180讲,由郝斌老师主讲,课堂讲解全程动手敲代码,讲解细致,对于重要知识点的讲解不厌其烦,是一个难得的C语言入门教程。希望大家能从郝斌老师那里学到更多的c语言的相关知识。 C语言是一种计算机程序设计语言。它既具有高级语言的特点,…...

    2024/5/2 1:37:11
  13. android 音乐播放控件

    之前看到网页版的网易音乐播放控件, 正好在一个开源学习项目中需要简单的音乐播放功能。所以想是不是可以封装一个音乐播放控件,提供一个类似网易播放控件的默认界面,而且提供更换界面的功能。使用时,只需要去设计界面, 而不用再去管音乐播放的逻辑,所以就实现了一个简单…...

    2024/5/1 23:31:59
  14. Try Ruby! 大家一起来!

    想感受一下ruby却又不想费事的安装它? 没有关系, 现在有了Try Ruby站点, 只要你有浏览器你就可以立刻使用ruby了,Try Ruby提供了一个类似ruby的irb那样的交互环境, 还提供了一个简短的ruby教程.怎么样? 还不马上去试试看--------------------------------------------------…...

    2024/5/2 6:22:31
  15. 一个C#编写的开源用户自定义控件—野比的状态波形图控件

    野比的状态波形图控件,一个C#编写的开源用户自定义控件,作者博客在这:http://www.cnblogs.com/conmajia/archive/2012/05/10/nobi-status-chart.html我个人是要做一个类似Windows 任务管理器的CPU、内存使用图的东西,结果找到了这个控件,试用了一下觉得还挺好用的就和大家…...

    2024/4/20 18:12:16
  16. C语言书籍推荐

    C语言书籍推荐宗旨:技术的学习是有限的,分享的精神是无限的。一、基础 1、《C语言入门很简单》 《零起点学通C语言(多媒体范例教学)》 《C语言从入门到精通》 2、《C程序设计语言 第2版新版》 《C程序设计语言(第2版新版)习题解答》 《C语言程…...

    2024/5/2 3:31:05
  17. unity 使用 C# 实时获取外部程序的控制台输出

    项目里,有同事把外部的 cmake 编译 C++ 的脚本集成到 unity编辑器里来 ,并且把编译输出实时打印到 Unity 的控制台里。实现这一功能主要依赖于 .net framework 的 System.Diagnostics.Process 类。 Process 类可以唤起一个进程. 如果想截取控制台输出,则需要设置 进程的 St…...

    2024/5/2 4:31:09
  18. C#调用cmd 脚本实例

    1.实例1public static void TestOne() {Process p = new Process();p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardErr…...

    2024/5/2 6:18:09
  19. 微信密码框提示下载并安装安全控件

    登录微信商户平台 输入密码时 一直提示 微信密码框提示下载并安装安全控件 点击下载重复下载了很多次 依然没有用解决办法:这是 兼容问题 浏览器切换至兼容模式或者直接用IE浏览器就可以登陆了...

    2024/5/2 2:42:28
  20. 51单片机学习之流水灯的设计

    我是我在学习郭天祥的《51单片机C语言教程》中的笔记。 【例2.2.1】编写程序,点亮第一个发光二极管。 #include <reg52.h> //52系列单片机头文件 abit led1 = p1^0; //声明单片机P1口的第一位 void main() //主函数 {led1 = 0; /*点亮第一个发光二极管*/ }在代码…...

    2024/5/1 11:47:40

最新文章

  1. 我独自升级崛起下载方法分享 下载教程

    《我独自升级&#xff1a;崛起》这款精彩绝伦的动作角色扮演游戏&#xff0c;灵感来源于大热网络漫画&#xff0c;让玩家亲自踏上主角程肖宇的征途&#xff0c;从觉醒初阶到实力飞跃&#xff0c;每一步成长都扣人心弦。值得注意的是&#xff0c;尽管全球正式发布日期定在了五月…...

    2024/5/7 19:19:15
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. dp小兰走迷宫

    昨天学习了bfs的基本概念&#xff0c;今天来做一道经典习题练练手吧&#xff01; bfs常用的两类题型 1.从A出发是否存在到达B的路径(dfs也可) 2.从A出发到B的最短路径&#xff08;数小:<20才能用dfs&#xff09; 遗留的那个问题的答案- 题目&#xff1a;走迷宫 #incl…...

    2024/5/7 4:57:38
  4. 数据挖掘中的PCA和KMeans:Airbnb房源案例研究

    目录 一、PCA简介 二、数据集概览 三、数据预处理步骤 四、PCA申请 五、KMeans 聚类 六、PCA成分分析 七、逆变换 八、质心分析 九、结论 十、深入探究 10.1 第 1 步&#xff1a;确定 PCA 组件的最佳数量 10.2 第 2 步&#xff1a;使用 9 个组件重做 PCA 10.3 解释 PCA 加载和特…...

    2024/5/7 6:40:17
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57