华清数据结构day5 24-7-22

news2024/11/24 9:09:30

1>使用栈,完成进制转换输入:一个整数,进制数输出:该数的对应的进制数

seqstack.h

#ifndef SEQSTACK_H
#define SEQSTACK_H
#define MAX 10
#include"myhead.h"
typedef int datatype;

typedef struct 
{
	datatype *data;
	int top;
}Stack,*StackPtr;
//创建栈
StackPtr stack_create();
//判空
int stack_empty(StackPtr S);
//判满
int stack_full(StackPtr S);
//入栈
void stack_push(StackPtr S, datatype e);
//出栈
void stack_pop(StackPtr S);
//遍历栈
void stack_show(StackPtr S);
//获取栈顶元素
datatype* stack_get_top(StackPtr S);
//求栈的大小
int stack_size(StackPtr S);
//销毁栈
void stack_destroy(StackPtr S);
//进制转换
void base_conversion(StackPtr S);
#endif

seqstack.c

#include"seqstack.h"

StackPtr stack_create()
{
	StackPtr S = (StackPtr)malloc(sizeof(Stack));
	if(NULL == S)
	{
		printf("创建失败\n");
		return NULL;
	}
	S->data = (datatype *)malloc(sizeof(datatype)*MAX);
	if(NULL == S->data)
	{
		printf("创建失败\n");
		return NULL;
	}
	memset(S->data,0,sizeof(datatype)*MAX);
	S->top = -1;
	return S;
}

int stack_empty(StackPtr S)
{
 	return S->top == -1;
}

int stack_full(StackPtr S)
{
	return S->top == MAX-1;
}

void stack_push(StackPtr S,datatype e)
{
	if(NULL == S||stack_full(S))
	{
		printf("入栈失败\n");
		return;
	}
	S->top++;
	S->data[S->top] = e;
}

void stack_pop(StackPtr S)
{
	if(NULL == S||stack_empty(S))
	{
		printf("出栈失败\n");
		return;
	}
	S->top--;
}

void stack_show(StackPtr S)
{
	if(NULL == S|| stack_empty(S))
	{
		printf("遍历失败\n");
		return;
	}
	for(int i = S->top;i>=0;i--)
	{
		printf("%c\t",S->data[i]+48);
	}
	printf("\n");
}

datatype* stack_get_top(StackPtr S)
{
	if(NULL == S||stack_empty(S))
	{
		printf("操作失败\n");
		return NULL;
	}
	return &S->data[S->top];
}

int stack_size(StackPtr S)
{
	if(NULL == S)
	{
		printf("操作失败\n");
	}
	return S->top+1;
}

void stack_destroy(StackPtr S)
{
 	if(S!=NULL)
	{
		free(S->data);
		free(S);
		S=NULL;
	}
}

void base_conversion(StackPtr S)
{
	int num = 0,base = 0;
	printf("请输入一个数(10进制):");
	scanf("%d",&num);
	printf("请输入你想要将他转换成为的进制:");
	scanf("%d",&base);
	while(num)
	{
		if (num%base >9)
		{
			stack_push(S,num%base+7);
		}
		else
		{
				stack_push(S,num%base);
		}	
		num=num/base;
	}
		stack_show(S);
}

main.c

#include"seqstack.h"
#include<myhead.h>
int main(int argc, const char *argv[])
{
	StackPtr S = stack_create();
	if(NULL == S)
	{
		return -1;
	}
	base_conversion(S);
    //调用销毁函数
    stack_destroy(S);
    S = NULL;

	return 0;
}

2> 将双向链表和循环链表自己实现一遍,至少要实现创建、增、删、改、查、销毁工作

双向链表

doublelinklist.h

#ifndef DOUBLELINKLIST_H
#define DOUBLELINKLIST_H
#include"myhead.h"
typedef char datatype;

typedef struct Node
{
	union
	{
		int len;
		datatype data;
	};
	struct Node *prio;
	struct Node *next;
}Node,*NodePtr;

NodePtr list_create();

int list_empty(NodePtr L);

NodePtr apply_node(datatype e);

int list_insert_head(NodePtr L,datatype e);

int list_show(NodePtr L);

NodePtr list_search_pos(NodePtr L ,int  pos);

int list_delete_pos(NodePtr L,int pos);

void list_destroy(NodePtr L);
int list_update_pos(NodePtr L, int pos, datatype e);
#endif

doublellinklist.c

#include"doublelinklist.h"

NodePtr list_create()
{
	NodePtr L = (NodePtr)malloc(sizeof(Node));
	if(L == NULL)
	{
		printf("申请失败\n");
		return NULL;
	}
	L->len = 0;
	L->prio = NULL;
	L->next = NULL;
	printf("创建成功\n");
	return L;
}

int list_empty(NodePtr L)
{
	return L->next == NULL;
}

NodePtr apply_node(datatype e)
{
	NodePtr p = (NodePtr)malloc(sizeof(Node));
	if(NULL == p)
	{
		printf("节点申请失败\n");
		return NULL;
	}
	p->data = e;
	p->prio == NULL;
	p->next == NULL;
	return p;
}


int list_insert_head(NodePtr L,datatype e)
{
	if(NULL == L)
	{
		printf("插入失败\n");
	}
	NodePtr p = apply_node(e);
	if(NULL == p)
	{
		return -1;
	}
	if(list_empty(L))
	{
		p->prio = L;
		L->next = p;
	}
	else
	{
		p->prio = L;
		p->next = L->next;
		L->next->prio = p;
		L->next = p;
	}
	L->len++;
	printf("插入成功\n");
	return 0;
}

int list_show(NodePtr L)
{
	if(NULL == L||list_empty(L))
	{
		printf("遍历失败\n");
		return -1;
	}
	NodePtr q = L->next;
	while(q)
	{
		printf("%c\t",q->data);
		q=q->next;
	}
	printf("\n");
	return 0;
}

NodePtr list_search_pos(NodePtr L ,int  pos)
{
	if(NULL == L|| list_empty(L) ||pos<0 || pos>L->len)
	{
		printf("查找失败\n");
		return NULL;
	}
	NodePtr q = L;
	for(int i=0;i<pos;i++)
	{
		q=q->next;
	}
	return q;
}
int list_update_pos(NodePtr L, int pos, datatype e)
{
	if (NULL == L || list_empty(L)|| pos<0||pos>L->len)
	{
		printf("修改失败\n");
		return -1;
	}
	NodePtr p = list_search_pos(L,pos);
	p->data = e;
	printf("修改成功\n");
	return 0;
}
int list_delete_pos(NodePtr L,int pos)
{   
	if(NULL == L|| list_empty(L) || pos<0||pos>L->len)
	{
		printf("删除失败\n");
		return -1;
	}
	NodePtr p = list_search_pos(L,pos);
	if(NULL == p->next)
	{
		p->prio->next = NULL;
		free(p);
	}
	else
	{
		p->prio->next = p->next;
		p->next->prio = p->prio;
		free(p);
	}
	L->len--;
	printf("删除成功\n");
	return 0;
}

void list_destroy(NodePtr L)
{
	if(NULL == L)
	{
		printf("删除失败\n");
		return;
	}
	while(!list_empty(L))
	{
		list_delete_pos(L,1);
	}
	free(L);
	L=NULL;
	printf("链表释放成功\n");
	return;
}

main.c

#include"doublelinklist.h"

int main(int argc, const char *argv[])
{
	NodePtr L = list_create();
	if(NULL == L)
	{
		return -1;
	}
	list_insert_head(L,'Q');
	list_insert_head(L,'W');
	list_insert_head(L,'E');
	list_insert_head(L,'R');
	list_show(L);
	list_update_pos(L,2,'F');
	list_show(L);
	list_delete_pos(L,4);
	list_show(L);
	list_destroy(L);
	return 0;
}

循环链表

looplinklist.h

#ifndef LOOPLINKLIST_H
#define LOOPLINKLIST_H
#include"myhead.h"
typedef char datatype;

typedef struct Node
{
	union
	{
		int len;
		datatype data;
	};
	struct Node *prio;
	struct Node *next;
}Node,*NodePtr;
//链表创建
NodePtr list_create();
//链表判空
int list_empty(NodePtr L);
//链表申请空间封装节点
NodePtr apply_node(datatype e);
//按位置查找
NodePtr list_search_pos(NodePtr L ,int pos);
//链表尾插
int list_insert_tail(NodePtr L,datatype e);
//链表输出
int list_show(NodePtr L);
//链表头删
int list_delete_head(NodePtr L);
//链表任意位置删除
int list_delete_pos(NodePtr L, int pos);
//链表按位置进行修改
int list_update_pos(NodePtr L, int pos, datatype e);
//链表销毁
void list_destory(NodePtr L);
#endif

looplinklist.c

#include"looplinklist.h"
//链表创建
NodePtr list_create()
{
	NodePtr L = (NodePtr)malloc(sizeof(Node));
	if(NULL == L)
	{
		printf("创建失败\n");
		return NULL;
	}
	L->len=0;
	L->next = L;
	printf("创建成功\n");
	return L;
}
//链表判空
int list_empty(NodePtr L)
{
	return L->next==L;
}
//链表申请空间封装节点
NodePtr apply_node(datatype e)
{
	NodePtr p = (NodePtr)malloc(sizeof(Node));
	if(NULL == p)
	{
		printf("创建失败\n");
		return NULL;
	}
	p->data = e;
	p->next = NULL;
	return p;
}
//按位置查找
NodePtr list_search_pos(NodePtr L ,int pos)
{
	if(NULL == L|| pos<0 ||pos>L->len)
	{
		printf("查找失败\n");
		return NULL;
	}
	NodePtr q = L;
	for(int i= 0;i<pos;i++)
	{
		q=q->next;
	}
	return q;
}
//链表尾插
int list_insert_tail(NodePtr L,datatype e)
{
	if(NULL == L)
	{
		printf("插入失败\n");
		return -1;
	}
	NodePtr q = list_search_pos(L,L->len);
	
	NodePtr p = apply_node(e);

	if(NULL == L)
	{
		return -1;
	}
	p->next = q->next;
	q->next = p;

	L->len++;
	printf("插入成功\n");
	return 0;
}
//链表输出
int list_show(NodePtr L)
{
	if(NULL== L||list_empty(L))
	{
		printf("遍历失败\n");
		return -1;
	}
	NodePtr q = L->next;
	while(q!=L)
	{
		printf("%c\t",q->data);
		q=q->next;
	}
	printf("\n");
}
//链表头删
int list_delete_head(NodePtr L)
{
	if(NULL==L || list_empty(L))
	{
		printf("删除失败\n");
		return -1;
	}
	NodePtr q = L->next;
	L->next = q->next;
	free(q);
	q=NULL;
	L->len--;
	printf("删除成功\n");
}
//链表销毁
void list_destory(NodePtr L)
{
	if(NULL == L)
	{
		printf("释放失败\n");
		return;
	}
	while(!list_empty(L))
	{
		list_delete_head(L);
	}
	free(L);
	L = NULL;
	printf("销毁成功\n");
}
//链表任意位置删除
int list_delete_pos(NodePtr L, int pos)
{
	if (NULL == L||pos<0 ||pos>L->len||list_empty(L))
	{
		printf("删除失败\n");
		return -1;
	}
	NodePtr p = list_search_pos(L,pos-1);
	NodePtr q = p->next;
	p->next = q->next;
	free(q);
	q=NULL;
	printf("删除成功\n");
	L->len--;  
	return 0;
}
//链表按位置进行修改
int list_update_pos(NodePtr L, int pos, datatype e)
{
	if (NULL == L||pos<0 ||pos>L->len||list_empty(L))
	{
		printf("修改失败\n");
		return -1;
	}
	NodePtr p = list_search_pos(L,pos);
	p->data = e;
	printf("修改成功\n");
	return 0;
}

main.c

#include"looplinklist.h"
#include<myhead.h>
int main(int argc, const char *argv[])
{
	NodePtr L = list_create();
	if(NULL == L)
	{
		return -1;
	}
	list_insert_tail(L,'Q');
	list_insert_tail(L,'W');
	list_insert_tail(L,'E');
	list_insert_tail(L,'R');
	list_insert_tail(L,'T');
	list_show(L);
	list_update_pos(L,2,'P');
	list_show(L);
	list_delete_pos(L,3);
	list_show(L);
	list_destory(L);
	L=NULL;
	return 0;
}

3> 使用循环链表完成约瑟夫环问题

looplinklist.h

#ifndef LOOPLINKLIST_H
#define LOOPLINKLIST_H
#include"myhead.h"
typedef char datatype;

typedef struct Node
{
	union
	{
		int len;
		datatype data;
	};
	struct Node *prio;
	struct Node *next;
}Node,*NodePtr;
//链表创建
NodePtr list_create();
//链表判空
int list_empty(NodePtr L);
//链表申请空间封装节点
NodePtr apply_node(datatype e);
//按位置查找
NodePtr list_search_pos(NodePtr L ,int pos);
//链表尾插
int list_insert_tail(NodePtr L,datatype e);
//链表输出
int list_show(NodePtr L);
//链表头删
int list_delete_head(NodePtr L);
//链表任意位置删除
int list_delete_pos(NodePtr L, int pos);
//链表按位置进行修改
int list_update_pos(NodePtr L, int pos, datatype e);
//链表销毁
void list_destory(NodePtr L);
//约瑟夫
void Josephus_problem(NodePtr L);
#endif

looplinklist.c

#include"looplinklist.h"
//链表创建
NodePtr list_create()
{
	NodePtr L = (NodePtr)malloc(sizeof(Node));
	if(NULL == L)
	{
		printf("创建失败\n");
		return NULL;
	}
	L->len=0;
	L->next = L;
	printf("创建成功\n");
	return L;
}
//链表判空
int list_empty(NodePtr L)
{
	return L->next==L;
}
//链表申请空间封装节点
NodePtr apply_node(datatype e)
{
	NodePtr p = (NodePtr)malloc(sizeof(Node));
	if(NULL == p)
	{
		printf("创建失败\n");
		return NULL;
	}
	p->data = e;
	p->next = NULL;
	return p;
}
//按位置查找
NodePtr list_search_pos(NodePtr L ,int pos)
{
	if(NULL == L|| pos<0 ||pos>L->len)
	{
		printf("查找失败\n");
		return NULL;
	}
	NodePtr q = L;
	for(int i= 0;i<pos;i++)
	{
		q=q->next;
	}
	return q;
}
//链表尾插
int list_insert_tail(NodePtr L,datatype e)
{
	if(NULL == L)
	{
		printf("插入失败\n");
		return -1;
	}
	NodePtr q = list_search_pos(L,L->len);
	
	NodePtr p = apply_node(e);

	if(NULL == L)
	{
		return -1;
	}
	p->next = q->next;
	q->next = p;

	L->len++;
	printf("插入成功\n");
	return 0;
}
//链表输出
int list_show(NodePtr L)
{
	if(NULL== L||list_empty(L))
	{
		printf("遍历失败\n");
		return -1;
	}
	NodePtr q = L->next;
	while(q!=L)
	{
		printf("%c\t",q->data);
		q=q->next;
	}
	printf("\n");
}
//链表头删
int list_delete_head(NodePtr L)
{
	if(NULL==L || list_empty(L))
	{
		printf("删除失败\n");
		return -1;
	}
	NodePtr q = L->next;
	L->next = q->next;
	free(q);
	q=NULL;
	L->len--;
	printf("删除成功\n");
}
//链表销毁
void list_destory(NodePtr L)
{
	if(NULL == L)
	{
		printf("释放失败\n");
		return;
	}
	while(!list_empty(L))
	{
		list_delete_head(L);
	}
	free(L);
	L = NULL;
	printf("销毁成功\n");
}
//链表任意位置删除
int list_delete_pos(NodePtr L, int pos)
{
	if (NULL == L||pos<0 ||pos>L->len||list_empty(L))
	{
		printf("删除失败\n");
		return -1;
	}
	NodePtr p = list_search_pos(L,pos-1);
	NodePtr q = p->next;
	p->next = q->next;
	free(q);
	q=NULL;
	printf("删除成功\n");
	L->len--;  
	return 0;
}
//链表按位置进行修改
int list_update_pos(NodePtr L, int pos, datatype e)
{
	if (NULL == L||pos<0 ||pos>L->len||list_empty(L))
	{
		printf("修改失败\n");
		return -1;
	}
	NodePtr p = list_search_pos(L,pos);
	p->data = e;
	printf("修改成功\n");
	return 0;
}
void Josephus_problem(NodePtr L)
{
	int count = 0,num = 0;
	printf("请输入数到几退出:");
	scanf("%d",&num);
	NodePtr p = L;
	while (!list_empty(L))
	{
		if (p->next == L)
		{
			p = p->next;
		}
		count++;
		if(count+1 == num)
		{
			printf("%c\t",p->next->data);
			NodePtr q = p->next;
			p->next = q->next;
			free(q);
			q=NULL;
			L->len--;  
			count = 0;
		}
		
		printf("\n");
		p = p->next;
	}
	
	
}

main.c

#include"looplinklist.h"
#include<myhead.h>
int main(int argc, const char *argv[])
{
	NodePtr L = list_create();
	if(NULL == L)
	{
		return -1;
	}
	list_insert_tail(L,'Q');
	list_insert_tail(L,'W');
	list_insert_tail(L,'E');
	list_insert_tail(L,'R');
	list_insert_tail(L,'T');
	// list_show(L);
	// list_update_pos(L,2,'P');
	// list_show(L);
	// list_delete_pos(L,3);
	// list_show(L);
	Josephus_problem(L);
	list_destory(L);
	L=NULL;
	return 0;
}

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

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

相关文章

ReadAgent,一款具有要点记忆的人工智能阅读代理

人工智能咨询培训老师叶梓 转载标明出处 现有的大模型&#xff08;LLMs&#xff09;在处理长文本时受限于固定的最大上下文长度&#xff0c;并且当输入文本越来越长时&#xff0c;性能往往会下降&#xff0c;即使在没有超出明确上下文窗口的情况下&#xff0c;LLMs 的性能也会随…

Java查询ES报错 I/O 异常解决方法: Request cannot be executed; I/O reactor status: STOPPED

问题 ES Request cannot be executed; I/O reactor status: STOPPED 报错解决 在使用ES和SpringBoot进行数据检索时&#xff0c;在接口中第一次搜索正常。第二次在搜索时在控制台就会输出Request cannot be executed; I/O reactor status: STOPPED错误 原因 本文错误是因为在使…

高清视频,无损音频,LDR6023——打造极致视听与高效充电的双重享受!

Type-C PD&#xff08;Power Delivery&#xff09;芯片是一种支持USB Type-C接口规范的电源管理单元&#xff0c;其主要功能包括&#xff1a; 快速充电&#xff1a;Type-C PD芯片支持高功率传输&#xff0c;能够提供更快的充电速度&#xff0c;使电子设备在短时间内充满电&…

自然语言处理之RNN实现情感分类

前言 IMDB数据集经过分词处理后需要进行额外的预处理&#xff0c;包括将Token转换为index id&#xff0c;并统一文本序列长度。使用MindSpore.dataset接口进行预处理操作&#xff0c;包括text.Lookup和PadEnd接口。此外&#xff0c;还需要将label数据转换为float32格式。 模型…

.NET下支持多框架的托盘功能NotifyIconEx(WPF / WinForms / Avalonia / WinUI / MAUI / Wice)

支持 WPF / WinForms / Avalonia / WinUI / MAUI / Wice 应用。 先看效果&#xff1a; using NotifyIconEx;var notifyIcon new NotifyIcon() {Text "NotifyIcon",Icon Icon.ExtractAssociatedIcon(Process.GetCurrentProcess().MainModule?.FileName!)! }; not…

Kafka Producer之事务性

文章目录 1. 跨会话幂等性失效2. 开启事务3. 事务流程原理 事务性可以防止跨会话幂等性失效&#xff0c;同时也可以保证单个生产者的指定数据&#xff0c;要么全部成功要么全部失败&#xff0c;不限分区。不可以多个生产者共用相同的事务ID。 1. 跨会话幂等性失效 幂等性开启…

redis的学习(二):常见数据结构及其方法

简介 redis常见的数据结构和他们的常用方法 redis的数据结构 redis是一个key-value的nosql&#xff0c;key一般是字符串&#xff0c;value有很多的类型。 j基本类型&#xff1a; stringhashlistsetsortedSet 特殊类型&#xff1a; GEOBitMapHyperLog key的结构 可以使用…

VScode连接虚拟机运行Python文件的方法

声明&#xff1a;本文使用Linux发行版本为rocky_9.4 目录 1. 在rocky_9.4最小安装的系统中&#xff0c;默认是没有tar工具的&#xff0c;因此&#xff0c;要先下载tar工具 2. 在安装好的vscode中下载ssh远程插件工具 3. 然后连接虚拟机 4. 查看python是否已经安装 5. 下载…

Maven的核心概念

Maven的核心概念 —2020年06月11日 什么是Maven Maven是一款服务于Java平台的自动化构建工具。 约定的目录结构 目录结构&#xff1a; 根目录&#xff1a;工程名src目录&#xff1a;源码pom.xml文件&#xff1a;Maven工程的核心配置文件main目录&#xff1a;存放主程序tes…

Zabbix监控系统:zabbix服务部署+基于Proxy分布式部署+zabbix主动与被动监控模式

一、Zabbix概述 1.1 简介 zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff0c;提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix…

三、GPIO按键读取

在上一篇文章中&#xff0c;我们详细讲解了GPIO的写函数。万事万物都具有一定的相对性&#xff0c;GPIO的操作也不例外。既然有写操作&#xff0c;那么必然也有读操作。有了上一篇文章的基础&#xff0c;理解本篇内容将会更加容易。 一、这篇文章能了解什么 本篇文章将基于上一…

为什么用LeSS?

实现适应性 LeSS是一个产品开发的组织系统&#xff0c;旨在最大化一个组织的适应性。关于适应性&#xff08;或者敏捷性&#xff0c;也就是敏捷开发的初衷&#xff09;我们是指优化&#xff1a; 以相对低的成本改变方向的能力&#xff0c;主要是基于通过频繁交付产生的探索。从…

【Linux 驱动】IMX6ULL eLCDIF驱动

1. eLCDIF设备树 lcdif: lcdif021c8000 {compatible "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; //属性reg <0x021c8000 0x4000>; //起始地址 地址大小interrupts <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; …

1小时上手Alibaba Sentinel流控安全组件

微服务的雪崩效应 假如我们开发了一套分布式应用系统&#xff0c;前端应用分别向A/H/I/P四个服务发起调用请求&#xff1a; 但随着时间推移&#xff0c;假如服务 I 因为优化问题&#xff0c;导致需要 20 秒才能返回响应&#xff0c;这就必然会导致20秒内该请求线程会一直处于阻…

Prompt Enginnering(提示工程)

什么是提示工程 prompt enginnering是提示工程的意思&#xff0c;也有叫指令工程。 用白话讲&#xff1a;是我们对GPT说出的话&#xff0c;我们向它提问的信息&#xff0c;就是prompt。 官方一点&#xff1a;是我们使用自然语言提示来控制和优化生成式模型&#xff08;生成式…

《Milvus Cloud向量数据库指南》——SPLADE:基于BERT的Learned稀疏向量技术深度解析

在自然语言处理(NLP)领域,随着深度学习技术的飞速发展,预训练语言模型如BERT(Bidirectional Encoder Representations from Transformers)已成为推动研究与应用进步的重要基石。BERT通过其强大的上下文感知能力,在多项NLP任务中取得了显著成效,尤其是在文本表示和语义理…

深入理解Linux网络(五):TCP接收唤醒

深入理解Linux网络&#xff08;五&#xff09;&#xff1a;TCP接收唤醒 TCP接收唤醒由软中断提供服务。 软中断&#xff08;也就是 Linux ⾥的 ksoftirqd 进程&#xff09;⾥收到数据包以后&#xff0c;发现是 tcp 的包的话就会执⾏到 tcp_v4_rcv 函数。接着如果是 ESTABLISH…

GMSSL2.x编译鸿蒙静态库和动态库及使用

一、编译环境准备 1.1 开发工具 DevEco-Studio下载。 1.2 SDK下载 ​ 下载编译第三方库的SDK有两种方式&#xff0c;第一种方式从官方渠道根据电脑系统选择对应的SDK版本&#xff0c;第二种方式通过DevEco-Studio下载SDK。本文只介绍通过DevEco-Studio下载SDK的方式。 安装…

(十一)Spring教程——Bean基本配置与依赖注入之属性注入

1.Bean基本配置 在进行Bean配置的详细讲解之前&#xff0c;先来了解以下Bean配置的基础知识&#xff0c;以快速建立起Bean配置的初步概念。 1.1装配一个Bean 在Spring容器的配置文件中定义一个简要Bean的配置片段如下所示 <bean id”foo” class”com.smart.Foo”/> 一般…

【VSCode】安装 【ESP-IDF】插件及【ESP32-S3】新建工程和工程配置

一、搭建基础工程 二、基础工程的文件架构解析 三、调试相关工具介绍 1、串口下载2、JTAG 下载与调试 四、工程的文件架构解析 五、基础工程配置 一、搭建基础工程 在 VS Code 中新建 ESP-IDF 基础工程的步骤如下&#xff1a; 1、启动 VS Code 并打开命令面板 按下“Ctrl…