当前位置: 首页 > news >正文

【C#基础】C# 常用数据结构

序号系列文章
4【C#基础】C# 变量和常量的使用
5【C#基础】C# 运算符总结
6【C#基础】C# 常用语句讲解

文章目录

  • 前言
  • 数据结构的概念
  • 1,数组 (Array)
    • 1.1,声明并初始化赋值
    • 1.2,访问数组元素
    • 1.3,Array 类的使用
  • 2,字符串 (String)
    • 2.1,声明并初始化赋值
    • 2.2,输出字符串
    • 2.3,String 类的使用
  • 3,结构体(Struct)
    • 3.1,结构体的定义
    • 3.2,结构体的使用
    • 3.3,结构体和类的区别
  • 4,枚举(Enum)
    • 4.1,枚举的定义
    • 4.2,枚举的使用
    • 4.3,Enum 类的使用
  • 结语

前言

😀大家好,我是writer桑,前面一章已经学习了 C# 中常用语句的用法,那本章就开始学习 C# 程序中常用的数据结构的介绍与用法,希望看完大家能够有所收获,感谢支持!


数据结构的概念

数据结构是一种计算机科学技术领域广泛使用的专业术语,指的是计算机存储组织数据的方式。正所谓程序 = 数据结构 + 算法, 而数据结构 = 数据 + 结构,指的是相互之间存在一种或多种特定关系的数据元素的集合。 一般情况下选用合适的数据结构可以让程序运行的效率变得更高。

1,数组 (Array)

数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。

示例如下:

using System;public class Program
{static void Main(string[] args){// 声明一个整数类型的数组 int[] arr = { 1, 2, 3, 4, 5, 6, 7 };// 通过下标访问数组 Console.WriteLine(arr[0]);      Console.WriteLine(arr[1]);Console.WriteLine(arr[2]);// 通过 foreach 语句访问 foreach(int i in arr){Console.Write(i + " ");     // 1 2 3 4 5 6 7 }Console.WriteLine();// Array类的使用, 反转数组 Array.Reverse(arr);foreach(int i in arr){Console.Write(i + " ");     // 7 6 5 4 3 2 1 }Console.WriteLine();    // 清空数组 Array.Clear(arr);foreach (int i in arr){Console.Write(i + " ");     // 0 0 0 0 0 0 0}}
}

1.1,声明并初始化赋值

声明数组的语法:datatype[] arrayName; 其中,datatype 表示存储在数组中元素的类型。 标记符 [] 声明表示建立数组的维度,也就是指定数组的长度大小。arrayName 是指定数组的名称,注意数组名称必须符合 C# 的命名规范。

示例如下:

// 数组的声明
int[] arr;

数组是引用类型,需要使用 new 运算符来初始化,该运算符指定数组元素类型元素数量 n 。其中,数组元素可以是任何类型,数组元素的索引从 0 开始到 n-1。而且数组元素在没有初始化赋值的情况下,数值数组元素的默认值为0,而引用类型元素设置为 null 。

示例如下:

// 数组初始化
int[] arr = new int[7];

数组元素可以指定索引赋值一个单独的元素,也可以在数组初始化时赋值指定的元素,此时可以省略长度说明,因为 C# 编译器会直接根据初始化列表中的元素数量推断得出。在声明初始化数组时,也可以省略掉 new 运算符的使用,这称为隐式类型化数组。

示例如下:

// 给定索引单独赋值 
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
arr[5] = 6;
arr[6] = 7; 
// 初始化时赋值 
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7 };
// 隐式类型化数组
int[] arr = { 1, 2, 3, 4, 5, 6, 7 };

1.2,访问数组元素

可以使用索引输出指定的元素,也可以使用 foreach 语句列举出数组中的所有元素。

示例如下:

// 通过下标访问数组 
Console.WriteLine(arr[0]);      
Console.WriteLine(arr[1]);
Console.WriteLine(arr[2]);
// 通过 foreach 语句访问 
foreach(int i in arr)
{Console.Write(i + " ");     // 1 2 3 4 5 6 7 
}

注意,在 C# 程序中数组可以是一维数组、多维数组和交错数组,它们之间的区别在于声明数组的维度上。更详细的介绍:C#一维数组、多维数组和交错数组的区别。

1.3,Array 类的使用

Array 类是支持数组语言实现的基类,它在 System 命名空间中定义。 Array 类提供了各种用于数组的属性和方法。

示例如下:

// Array类的使用, 反转数组 
Array.Reverse(arr);foreach(int i in arr)
{Console.Write(i + " ");     // 7 6 5 4 3 2 1 
}// 清空数组 
Array.Clear(arr);foreach(int i in arr)
{Console.Write(i + " ");     // 0 0 0 0 0 0 0
} 

列举 Array 类中的属性:

属性描述
IsFixedSize获取一个值,该值指示 Array 是否具有固定大小。
IsReadOnly获取一个值,该值指示 Array 是否为只读。
IsSynchronized获取一个值,该值指示是否同步对 Array 的访问(线程安全)。
Length获取 Array 的所有维度中的元素总数。
LongLength获取一个 64 位整数,该整数表示 Array 的所有维数中元素的总数。
MaxLength获取数组中可能包含的最大元素数。
Rank获取 Array 的秩(维数)。 例如,一维数组返回 1,二维数组返回 2,依次类推。
SyncRoot获取可用于同步对 Array 的访问的对象。

列举 Array 类中常用的方法:

方法描述
Clear(Array)清除数组的内容。
Copy(Array, Array, Int32)从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 32 位整数。
CopyTo(Array, Int32)从指定的目标数组索引处开始,将当前一维数组的所有元素复制到指定的一维数组中。 索引指定为 32 位整数。
GetLength(Int32)获取一个 32 位整数,该整数表示 Array 的指定维中的元素数。
GetLongLength(Int32)获取一个 64 位整数,该整数表示 Array 的指定维中的元素数。
GetLowerBound(Int32)获取数组中指定维度第一个元素的索引。
GetType()获取当前实例的 Type。(继承自 Object)
GetUpperBound(Int32)获取数组中指定维度最后一个元素的索引。
GetValue(Int32)获取一维 Array 中指定位置的值。 索引指定为 32 位整数。
IndexOf(Array, Object)在一个一维数组中搜索指定对象,并返回其首个匹配项的索引。
Reverse(Array)反转整个一维 Array 中元素的顺序。
SetValue(Object, Int32)将值设置为一维 Array 中指定位置的元素。 索引指定为 32 位整数。
Sort(Array)使用 Array 中每个元素的 IComparable 实现,对整个一维 Array 中的元素进行排序。
ToString返回表示当前对象的字符串。(继承自 Object)

Array 类更多方法请点击。

2,字符串 (String)

string 表示零个或多个 Unicode 字符的序列。string 是 System.String 在 .NET 中的别名。 在 C# 程序中使用 string 关键字和变量名称来声明一个字符串变量,其中变量名称需要符合 C# 的命名规范。

示例如下:

using System;public class Program
{static void Main(string[] args){// 声明一个 string 类型的字符串 string str = "Hello,world";string str2 = "Hello, C#";  // 通过下标访问字符串 Console.Write(str[0]);Console.Write(str[1]);Console.Write(str[2]);Console.Write(str[3]);Console.WriteLine();           // 输出:Hell// 直接输出 Console.WriteLine(str);        // 输出:Hello,world // 运算符的使用Console.WriteLine(str2 == str);     // TrueConsole.WriteLine(str2 != str);     // False // String 类的使用 string[] splitStr = str.Split(",");  // ["Hello","World"]Console.WriteLine(splitStr); 	// System.String[] string str3 = String.Join("", splitStr);Console.WriteLine(str3);    //  HelloWorld}
}

2.1,声明并初始化赋值

字符串的声明初始化有多种形式, 其中包括单行双引号、多行三个双引号、使用 string 构造函数、使用 String 类的属性方法和使用运算符等。

示例如下:

// 单行字符串使用双引号  
string str1 = "Hello,world";// 多行字符串使用三个双引号
string str2 = """This is a multi-linestring literal with the second line indented."""; 
//通过使用 string 构造函数
char[] str = { 'H', 'e', 'l', 'l', 'o' };
string greetings = new string(str);Console.WriteLine("Greetings: {0}", greetings);		// Greetings: Hello 
// 使用 String 类方法来生成字符串 
string[] strarray = { "Hello", "From", "Tutorials", "Point" };
string message = String.Join(" ", strarray);Console.WriteLine("Message: {0}", message);      // Message: Hello From Tutorials Point 
// 使用运算符,生成新的字符串 
string str = "Hello," + "World";Console.WriteLine(str);   // Hello,World 

在字符串的声明时可以使用 @ 和 $ 符号,分别表示逐字字符串和内插字符串。 逐字字符串不处理转义序列,而内插字符串是对整个字符串的格式化。

示例如下:

// 逐字字符串的声明 
string str = @"c:\Docs\Source\a.txt";Console.WriteLine(str);     // c:\Docs\Source\a.txt 
// 内插字符串的使用 
string s1 = "Hello";
string s2 = "World"; Console.WriteLine($"{s1},{s2}");    // Hello,World 

2.2,输出字符串

字符串的访问可以使用 [] 运算符指定下标访问个别字符,也可以直接通过 WriteLine 方法输出和foreach 循环遍历。

示例如下:

// 声明一个 string 类型的字符串 
string str = "Hello,world";
string str2 = "Hello, C#";  // 通过下标访问字符串 
Console.Write(str[0]);
Console.Write(str[1]);
Console.Write(str[2]);
Console.Write(str[3]);
Console.WriteLine();           // 输出:Hell
// 通过 WriteLine 方法输出
string str = "Hello,World";Console.WriteLine(str);     // "Hello,World"
// 使用 foreach 循环输出 
string str = "Hello,World"; foreach(char c in str)
{Console.Write(c);     // "Hello,World" 
}

2.3,String 类的使用

String 类是创建字符串类型的基类。它在 System 命名空间中定义,在 String 类提供了许多支持字符串的操作和方法。

示例如下:

// String 类的使用 
string[] splitStr = str.Split(",");         // ["Hello","World"]Console.WriteLine(splitStr);		// System.String[] 
// Join 方法指定字符进行连接 
string str3 = String.Join("", splitStr);
Console.WriteLine(str3);    //  HelloWorld

关于 String 类中的定义:

构造函数:

属性描述
String(Char*)将 String 类的新实例初始化为由指向 Unicode 字符数组的指定指针指示的值。
String(Char, Int32)将 String 类的新实例初始化为由重复指定次数的指定 Unicode 字符指示的值。

更多构造函数点击。

字段:

属性描述
Empty表示空字符串。 此字段为只读。

属性:

属性描述
Chars[Int32]获取当前 Char 对象中位于指定位置的 String 对象。
Length获取当前 String 对象中的字符数。

方法:

属性描述
Clone()返回对此 String实例的引用。
Compare(String, Int32, String, Int32, Int32)比较两个指定的 String 对象的子字符串,并返回一个指示二者在排序顺序中的相对位置的整数。
Compare(String, Int32, String, Int32, Int32, Boolean)比较两个指定的 String 对象的子字符串(忽略或考虑其大小写),并返回一个整数,指示二者在排序顺序中的相对位置。
Concat(Object)创建指定对象的字符串表示形式。
Concat(Object, Object)连接两个指定对象的字符串表示形式。
Contains(Char)返回一个值,该值指示指定的字符是否出现在此字符串中。
CopyTo(Int32, Char[], Int32, Int32)将指定数目的字符从此实例中的指定位置复制到 Unicode 字符数组中的指定位置。
CopyTo(Span<Char>)将此字符串的内容复制到目标范围。
Equals(Object)确定此实例是否与指定的对象(也必须是 String 对象)具有相同的值。
Equals(String)确定此实例是否与另一个指定的 String 对象具有相同的值。
Equals(String, String)确定两个指定的 String 对象是否具有相同的值。
Format(IFormatProvider, String, Object)将指定字符串中的一个或多个格式项替换为对应对象的字符串表示形式。 参数提供区域性特定的格式设置信息。
Format(IFormatProvider, String, Object, Object)将字符串中的格式项替换为两个指定对象的字符串表示形式。 参数提供区域性特定的格式设置信息。
GetEnumerator()检索一个可以循环访问此字符串中的每个字符的对象。
GetHashCode()返回该字符串的哈希代码。
GetType()获取当前实例的 Type。(继承自 Object)
IndexOf(Char)报告指定 Unicode 字符在此字符串中的第一个匹配项的从零开始的索引。
IndexOf(Char, Int32)报告指定 Unicode 字符在此字符串中的第一个匹配项的从零开始的索引。 该搜索从指定字符位置开始。
Insert(Int32, String)返回一个新的字符串,在此实例中的指定的索引位置插入指定的字符串。
IsNullOrEmpty(String)指示指定的字符串是 null 还是空字符串 (“”)。
Join(Char, Object[])连接对象数组的字符串表示形式,其中在每个成员之间使用指定的分隔符。
Join(Char, String[])连接字符串数组,其中在每个成员之间使用指定的分隔符。
LastIndexOf(Char)报告指定 Unicode 字符在此实例中的最后一个匹配项的从零开始的索引的位置。
LastIndexOf(Char, Int32)报告指定 Unicode 字符在此实例中的最后一个匹配项的从零开始的索引的位置。 在指定的字符位置开始和在向后的右边该字符串的开头处理的搜索。
Remove(Int32)返回当前实例中从指定位置到最后位置的所有以删除的字符的新字符串。
Remove(Int32, Int32)返回指定数量字符在当前这个实例起始点在已删除的指定的位置的新字符串。
Replace(String, String)返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。
Split(Char, Int32, StringSplitOptions)基于指定的分隔字符和(可选)选项将字符串拆分为最大数量的子字符串。 根据提供的字符分隔符将字符串拆分为最大数量的子字符串,可以选择忽略结果中的空子字符串。
Split(Char, StringSplitOptions)根据指定的分隔符和(可选)选项将字符串拆分为子字符串。
StartsWith(Char)确定此字符串实例是否以指定字符开始。
StartsWith(String)确定此字符串实例的开头是否与指定的字符串匹配。
Substring(Int32)从此实例检索子字符串。 子字符串在指定的字符位置开始并一直到该字符串的末尾。
Substring(Int32, Int32)从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。
ToCharArray()将此实例中的字符复制到 Unicode 字符数组。
ToCharArray(Int32, Int32)将此实例中的指定子字符串内的字符复制到 Unicode 字符数组。
ToLower()返回此字符串转换为小写形式的副本。
ToLower(CultureInfo)根据指定区域性的大小写规则返回此字符串转换为小写形式的副本。
ToString()返回 String 的此实例;不执行实际转换。
ToString(IFormatProvider)返回 String 的此实例;不执行实际转换。
ToUpper()返回此字符串转换为大写形式的副本。
ToUpper(CultureInfo)根据指定区域性的大小写规则返回此字符串转换为大写形式的副本。
Trim()从当前字符串删除所有前导空白字符和尾随空白字符。
TrimEnd()从当前字符串删除所有尾随空白字符。
TrimStart()从当前字符串删除所有前导空白字符。

更多类方法点击。

运算符:

属性描述
Equality(String, String)确定两个指定的字符串是否具有相同的值。
Implicit(String to ReadOnlySpan)定义给定字符串到只读字符范围的隐式转换。
Inequality(String, String)确定两个指定的字符串是否具有不同的值。

3,结构体(Struct)

结构体类型是一种可封装数据和相关功能的值类型。它使得一个单一变量可以存储各种数据类型的相关数据。使用 struct 关键字定义结构体类型。

3.1,结构体的定义

定义结构体类型,需要使用 struct 关键字和变量来生成,在结构体类型内可以定义需要的成员和构造函数。

示例如下:

using System;public struct Coords
{public Coords(double x, double y){X = x;Y = y;}public double X { get; }public double Y { get; }public override string ToString() => $"({X}, {Y})";
}public class Program
{ static void Main(string[] args){Coords coord = new Coords(11, 22);Console.WriteLine(coord);       // (11, 22) }
}

3.2,结构体的使用

在结构体定义之后。 可以使用 “结构体名称” + “实例化对象” 来生成实例对象,实例对象就可以操作在结构体内定义的成员。

示例如下:

public class Program
{ static void Main(string[] args){Coords coord = new Coords(11, 22);Console.WriteLine(coord);       // (11, 22) }
}

3.3,结构体和类的区别

点击跳转:C#面试常见基础知识点整理 第七条。

结构体在以下几个方面不同于类:

  • 结构体是值类型,类是引用类型。
  • 结构体常用于数据存储,类多用于行为。
  • 类支持继承, 而结构体不支持继承。
  • 类可以为抽象类,结构体类型不支持抽象模式。
  • 结构体不支持无参构造函数,也不支持析构函数,并且不能有Protected修饰符。

什么时候使用结构体类型:

通常,可以使用结构体类型来设计以数据为中心的较小类型,这些类型只有很少的行为或没有行为。 例如,.NET 使用结构体类型来表示数字(整数和实数)、布尔值、Unicode 字符以及时间实例。 如果侧重于类型的行为,请考虑定义一个类。 类类型具有引用语义 。也就是说,类类型的变量包含的是对类型的实例的引用,而不是实例本身。

4,枚举(Enum)

枚举类型是由基础整数数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定枚举成员的名称。

4.1,枚举的定义

枚举类型的定义使用 enum 关键字 + 枚举名称创建并且自定义枚举成员,枚举成员是一个用逗号分隔的标识符列表。 默认情况下第一个枚举成员的值为0,并依次递增, 也可以显示指定枚举成员的值。

示例如下:

// 枚举类型的定义 
enum Season
{Spring,Summer,Autumn,Winter
}

4.2,枚举的使用

使用枚举类型不需要实例化对象就可以使用。对于任何枚举类型,枚举类型与其基础整型类型之间存在显式转换。 如果将枚举值转换为其基础类型,则结果为枚举成员的关联整数值。

示例如下:

using System;public class EnumTest
{// 枚举类型的定义 enum Season{Spring,Summer,Autumn,Winter}static void Main(){int x = (int)Season.Spring;int y = (int)Season.Summer; Console.WriteLine("Spring = {0}", x);      // Spring = 0Console.WriteLine("Summer = {0}", y);      // Summer = 1 }
}

4.3,Enum 类的使用

Enum 类为所有枚举类型提供了基类。 它在 System 命名空间中定义,在 Enum 类提供了许多支持枚举类型的操作和方法。例如使用 Enum.IsDefined 方法来确定枚举类型是否包含具有特定关联值的枚举成员。

示例如下:

int value = 1;Console.WriteLine(Enum.IsDefined(typeof(Season), value));   // True 

关于 Enum 类中的定义:

构造函数:

属性描述
Enum()初始化 Enum 类的新实例。

方法

属性描述
CompareTo(Object)将此实例与指定对象进行比较并返回一个对二者的相对值的指示。
Equals(Object)返回一个值,该值指示此实例是否等于指定的对象。
Format(Type, Object, String)根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式。
GetHashCode()返回该实例的值的哈希代码。
GetName(Type, Object)在指定枚举中检索具有指定值的常数的名称。
GetType()获取当前实例的 Type。(继承自 Object)
IsDefined(Type, Object)返回一个布尔值,该值指示给定的整数值或其名称字符串是否存在于指定的枚举中。

更多类方法点击。


结语

⭐️ 以上就是 C# 常用数据结构的介绍,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!

相关文章:

【C#基础】C# 常用数据结构

序号系列文章4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结6【C#基础】C# 常用语句讲解文章目录前言数据结构的概念1&#xff0c;数组 &#xff08;Array&#xff09;1.1&#xff0c;声明并初始化赋值1.2&#xff0c;访问数组元素1.3&#xff0c;Array 类的使用2&am…...

MySql 及MyBatis数据的批量操作

1、Mybatis操作 1、批量更新 <update id"updateCtcc" parameterType"java.util.List">update ctcc set scan1 where id in<foreach collection"list" item"item" index"index" open"(" close")&qu…...

无代码表格数据库——一个企业数字化新物种

商业活动的“非标”地带在现实商业活动中存在大量未被明确界定、规范和标准化的灰色地带&#xff0c;它们不像电信、金融、财会、证券经纪、保险、建筑设计、工程造价等具有高度专业性的业务板块一样有强制的行业标准、规范甚至从业资格证书加持&#xff0c;下文统称其为非标业…...

第十三届蓝桥杯国赛 C++ C组 F 题、Python B组 E 题——近似GCD(AC)

目录1.近似GCD1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路3.Ac_code1.C2.Python1.近似GCD 1.题目描述 小蓝有一个长度为 nnn 的数组 A(a1,a2,⋯,an)A\left(a_{1}, a_{2}, \cdots, a_{n}\right)A(a1​,a2​,⋯,an​), 数组的子数组被定…...

分享5款小众良心软件,好用到让人惊艳

目前win7渐渐退出视野&#xff0c;大部分人都开始使用win10了&#xff0c;笔者在日常的工作和使用中&#xff0c;为了能够让效率的大提升&#xff0c;下载了不少软件&#xff0c;以下的软件都是个人认为装机必备&#xff0c;而且都是可以免费下载&#xff0c;且没有插件的。 1…...

WAF是什么?一篇文章带你全面了解WAF

WAF是什么&#xff1f;一篇文章带你全面了解WAF 文章目录WAF是什么&#xff1f;一篇文章带你全面了解WAFWAF是什么&#xff1f;一、WAF的工作原理二、WAF的分类三、WAF的特点四、如何选择和部署WAFWAF是什么&#xff1f; Web应用程序防火墙&#xff08;Web Application Firewa…...

django项目实战八(django+bootstrap实现增删改查)进阶验证码

目录 一、安装第三方 1、pillow 2、第三方字体文件 二、实现生成验证码 1、创建code.py 2、url 3、修改auth.py 4、修改account.py 5、修改login.html 三、验证码校验 1、验证码写入到session 2、修改form下的LoginForm类新增code字段 3、修改login.html 4、修改acco…...

IP 协议

1.IP协议报头如下图:版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bi…...

好用的SQL工具盘点:从学习到工作总有一款适合你

标题一.入坑阶段&#xff08;学习入门&#xff09;&#xff1a; 这个阶段一般就是小白&#xff0c;想学习SQL语言&#xff0c;然后到处找软件&#xff0c;找免费破解版找半天&#xff0c;找到了半天安装不下来&#xff0c;还可能把自己电脑搞中毒。 其实对于小白来说&#xf…...

Memcache介绍

Memcache介绍 Memcache是一个分布式内存对象缓存系统&#xff0c;其功能是为应用程序提供快速和可伸缩的数据存储。memcache使用简单&#xff0c;定义了相对少数几种操作&#xff08;set&#xff0c;add&#xff0c;replace&#xff0c;get&#xff0c;flush_all等&#xff09…...

PTA:C课程设计(1)

山东大学&#xff08;威海&#xff09;2022级大一下C习题集&#xff08;1&#xff09;1-7-1 求幂级数展开的部分和1-7-2 查询水果价格1-7-3 猜数字游戏1-7-4 特殊a串数列求和1-7-5 成绩统计分析表1-7-6 换硬币1-7-7 验证“哥德巴赫猜想”1-7-1 求幂级数展开的部分和 #include&…...

第二十篇 ResNet——模型讲解

​ 摘要 ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常明显。 模型的创新点在于提出残差学习的思…...

LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解

LeetCode经典算法题&#xff1a;矩阵中省份数量经典题目三角形最大周长java多种解法 文章目录1 省份数量题目描述解题思路与代码解法一&#xff1a;深度优先解法二&#xff1a;广度优先解法三&#xff1a;并查集2 三角形的最大周长题目描述解题思路与代码贪心算法&#xff1a;1…...

Vue3通透教程【一】Vue3现状—必然趋势?

文章目录&#x1f31f; 专栏介绍&#x1f31f; Vue默认版本&#x1f31f; 拥抱Vue3的UI&#x1f31f; Vue3显著优势&#x1f31f; 小彩蛋&#x1f31f; 写在最后&#x1f31f; 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相…...

打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构|最佳实践

福建纵腾网络有限公司&#xff08;简称“纵腾集团”&#xff09;成立于 2009 年&#xff0c; 以“全球跨境电商基础设施服务商”为企业定位&#xff0c;聚焦跨境仓储与物流&#xff0c; 为全球跨境电商商户、出口贸易企业、出海品牌商提供海外仓储、商业专线物流、定制化物流等…...

什么是真正的骨传导耳机,骨传导耳机原理

骨传导耳机大多采用后挂耳/夹耳佩戴方式&#xff0c;但现在很多人分不清哪些是骨传导耳机&#xff0c;哪些是气传导耳机。看完这篇教会你辨别哪些是真正的骨传导耳机。 骨传导耳机采用固体传声方式&#xff0c;整个耳机机身都没有传声音孔的设计&#xff0c;主要通过耳机振子发…...

[MySQL]基本数据类型及表的基本操作

哈喽&#xff0c;大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 MySQL 数据库常用的数据类型&#xff0c;数据表的基本操作&#xff1a;创建、删除、修改表&#xff0c;针对修改表的结构进行了讲解&#xff0c;随后是如何向数据表中添加数据&#xff0c;浅浅…...

华为OD机试 - 好朋友(Python) | 机试题+算法思路+考点+代码解析 【2023】

好朋友 题目 在学校中 N个小朋友站成一队 第i个小朋友的身高为height[i] 第i个小朋友可以看到第一个比自己身高更高的小朋友j 那么j是i的好朋友 (要求:j > i) 请重新生成一个列表 对应位置的输出是每个小朋友的好朋友的位置 如果没有看到好朋友 请在该位置用0代替 小朋友…...

SAP ABAP用程序给用户增加SAP_ALL权限

给用户增加SAP_ALL的权限&#xff0c;报表可对basis与abap开发人员对用户权限管理的思路&#xff0c;谢绝用于其它用途&#xff0c;后果自负。 REPORT ZTESTCREATEUSER. data: l_USR04 LIKE USR04 , l_UST04 LIKE UST04 , l_PROFS LIKE USR04-PROFS , l_…...

stm32f407探索者开发板(二十)——独立看门狗实验

文章目录一、独立看门狗概述1.1 独立看门狗二、常用寄存器和库函数配置2.1 独立看门狗框图2.2 键值寄存器IWDG_KR2.3 预分频寄存器IWDG_PR2.4 重装载寄存器IWDG_RLR2.5 状态寄存器IWDG_SR2.6 IWDG独立看门狗操作库函数三、手写独立看门狗实验3.1 操作步骤3.2 iwdg.c3.3 iwdg.h3…...

C语言进阶(五)—— 多维数组

1. 一维数组 元素类型角度&#xff1a;数组是相同类型的变量的有序集合内存角度&#xff1a;连续的一大片内存空间在讨论多维数组之前&#xff0c;我们还需要学习很多关于一维数组的知识。首先让我们学习一个概念。1.1 数组名考虑下面这些声明&#xff1a;int a; int b[10];我们…...

06_MySQL多表查询

多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&#xff0c;这个关联字段可能建立了外键&#xff0c;也…...

程序员赚钱指南,兼职社区招募

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;大数据专业硕士在读&#xff0c;CSDN人工智能领域博客专家&#xff0c;阿里云专家博主&#xff0c;专注大数据与人工智能知识分享。 &#x1f389;专栏推荐&#xff1a;目前在写一个CV方向专栏&#xff0c;后期会更新不限于目…...

Qt-FFmpeg开发-实现录屏功能(10)

#音视频/FFmpeg #Qt Qt-FFmpeg开发-实现录屏功能&#x1f4ac; 文章目录Qt-FFmpeg开发-实现录屏功能&#x1f4ac;1、概述&#x1f4a5;2、实现效果&#x1f4a8;3、FFmpeg录屏代码流程&#x1f441;️‍&#x1f5e8;️4、主要代码&#x1f919;5、完整源代码&#x1f90f;更…...

JavaEE简单示例——动态SQL元素<where>

简单介绍&#xff1a; 在我们之前使用where关键字进行查询的时候&#xff0c;总是会在后面添加一个11恒等式&#xff0c;并且在每一个可能拼接的SQL语句前面都加上一个and关键字&#xff0c;防止当后续的所有条件都不满足的时候&#xff0c;where关键字在最后直接跟and的时候也…...

本地事务详解

1、事务的基本性质 数据库事务的几个特性&#xff1a;原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation) 和持久性(Durabilily)&#xff0c;简称就是 ACID&#xff1b;  原子性&#xff1a;一系列的操作整体不可拆分&#xff0c;要么同时成功&#x…...

e2e测试-Cypress 使用

● 官网 ● GitHub 一、安装 # npm npm install cypress --save-dev# yarn yarn add cypress --dev添加 npm 脚本&#xff1a; {"scripts": {"cypress:open": "cypress open"} }启动&#xff1a; npm run cypress:open二、编写测试 Cypress…...

20230222 【梳理】肿瘤检测 预处理+ML+DL

一、预处理 1、形态学【使图像中的重要部分更加可见,并消除MRI图像的琐碎部分。】 形态学操作是一种非线性操作,涉及在二值图像上移动一个窗口(或结构元素),以一种方式帮助增长图像(膨胀)或缩小图像(侵蚀)[30]。这种预处理技术更有用,特别是当MRI图像中存在不需要...

经典文献阅读之--MSC-VO(曼哈顿和结构约束VIO)

0. 简介 对于视觉里程计而言&#xff0c;在面对低纹理场景时&#xff0c;往往会出现退化的问题&#xff0c;究其原因是人造环境往往很难找到足够数量的点特征。而其他的几何视觉线索则是比较容易找到&#xff0c;在城市等场景中&#xff0c;通常表现出结构规律&#xff0c;如平…...

华为OD机试真题Python实现【字母计数】真题+解题思路+代码(20222023

字母计数 题目 给出一个只包含字母的字符串, 不包含空格,统计字符串中各个子字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序输出各个字母及其出现次数 如果次数相同,按照自然顺序排序,且小写字母在大写字母之前 🔥🔥🔥🔥🔥👉👉👉👉👉�…...