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

C#数据结构

C#数据结构

常见结构

1、集合

2、线性结构

3、树形结构

4、图形结构

Array/ArrayList/List

特点:内存上连续存储,节约空间,可以索引访问,读取快,增删慢

using System;
namespace ArrayApplication
{class MyArray{static void Main(string[] args){int[] list = { 34, 72, 13, 44, 25, 30, 10 };Console.Write("原始数组: ");foreach (int i in list){Console.Write(i + " ");}Console.WriteLine();// 逆转数组Array.Reverse(list);Console.Write("逆转数组: ");foreach (int i in list){Console.Write(i + " ");}Console.WriteLine();// 排序数组Array.Sort(list);Console.Write("排序数组: ");foreach (int i in list){Console.Write(i + " ");}Console.WriteLine();Console.ReadKey();}}
}

ArrayList

特点:元素没有类型限制,任何元素都是当成object处理,如果是值类型,会有装箱操作,不定长

ArrayList与数组的区别:数组容量固定,而ArrayList可以根据需要扩充;提供高效的添加删除等操作,相比数组效率不高;ArrayList提供只读和固定大小返回集合;ArrayList只能一维形式,数组可以是多维的;

构造器*3:

ArrayList List=new ArrayList ;	 //List:ArrayList对象名
for(i=0;i<10;i++)        //给ArrayList类对象添加10个int型元素
{List.Add(i);
}
int[]arr=new int[]{1,2,3,4,5,6,7,8,9};
ArrayList List=new(arr);
ArrayList List=new(10);
for(int i=0;i<List.Count;i++)
{List.Add(i);    //给ArrayList添加10个int型元素
}

1、Add

int arr[] =new int[]{1,2,3,4,5,6};
ArrayList List = new (arr);	//使用声明的数组实例化ArrayList对象
List.Add(7);			    //为ArrayList对象添加元素

2、Insert

int[] arr = new int[]{1,2,3,4,5,6};
ArrayList List = new(arr);	//使用声明的数组实例化ArrayList对象
List.Insert(3,7);			//在ArrayList对象索引值=3处添加元素7

3、Clear

//使用 Clear()方法清除ArrayList中的所有元素
int[] arr = new int[]{1,2,3,4,5,6};
ArrayList List = new (arr);	//使用声明的数组实例化ArrayList对象
List.Clear();			    //在ArrayList对象指定位置添加元素

4、Remove

//使用RemoveAt()方法从声明的ArrayList对象中移除与3匹配的元素
int[] arr = new int[]{1,2,3,4,5,6};
ArrayList List = new(arr);	//使用声明的数组实例化ArrayList对象
List.Remove(3);			    //删除ArrayList对象指定位置元素

5、RemoveRange

//在ArrayList对象中使用RemoveRange()方法从索引3处删除两个元素
int[] arr = new int[]{1,2,3,4,5,6};
ArrayList List = new (arr);	   //使用声明的数组实例化ArrayList对象
List.RemoveRange(3,2);	       //删除ArrayList对象指定位置3处2个元素

6、Contains

//使用 Contains()方法判断数字2是否在ArrayList集合中
int[] arr = new int[]{1,2,3,4,5,6};
ArrayList List = new (arr);	   	    //使用声明的数组实例化ArrayList对象
Console.Write(List.Contains(2));	//ArrayList集合中是否包含指定的元素

7、IndexOf

public int IndexOf(String value);                  //语法1
public int IndexOf(char value);                    //语法2
public int IndexOf(String value, int startIndex);  //语法3
public int IndexOf(char value, int startIndex);    //语法4

8、LastIndexOf

public int LastIndexOf(String value);                   //语法1
public int LastIndexOf(char value);                     //语法2
public int LastIndexOf(String value, int startIndex);   //语法3
public int LastIndexOf(char value, int startIndex);     //语法4

9、foreach遍历

LinkedList

特点:非连续存储,存储数据和地址,只能顺序查找,读取慢,增删快,双向链表,泛型,保证类型安全,避免装箱拆箱,元素不连续分配,每个元素都记录前后节点,不定长

特性:

1)LinkedList 无法通过下标查找元素,在查找链表元素时,总是从头结点开始查找。

2)LinkedList 的容量是链表最大包含的元素数,会根据元素增减而动态调整容量

3)LinkedList 中的每个节点 都属于 LinkedListNode 类型

4)LinkedList 的值可以为 null,并允许重复值

5)LinkedList 不自带排序方法。

优点:不需要连续的内存空间,插入数据简单

缺点:每个节点离散,导致寻找越靠后效率越低

Dictionary

Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(1, "HaHa");
dic.Add(5, "HoHo");
dic.Add(3, "HeHe");
dic.Add(2, "HiHi");
foreach (var item in dic)
{Console.WriteLine($"Key:{item.Key} Value:{item.Value}");
}

SortedDictionary

SortedDictionary<int, string> dic = new SortedDictionary<int, string>();
dic.Add(1, "HaHa");
dic.Add(5, "HoHo");
dic.Add(3, "HeHe");
dic.Add(2, "HiHi");
dic.Add(4, "HuHu1");
dic[4] = "HuHu";                    
foreach (var item in dic)
{Console.WriteLine($"Key:{item.Key} Value:{item.Value}");
}
http://www.lryc.cn/news/262191.html

相关文章:

  • 代码随想Day39 | 62.不同路径、63. 不同路径 II
  • Autosar通信实战系列07-Com模块要点及其配置介绍(二)
  • DSP捕获输入简单笔记
  • 【Java基础】HashMap 原理
  • vue3的大致使用
  • 什么是计算机网络?计算机网络基础知识
  • 【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
  • RealBasicVSR高清处理视频
  • 晚期食管癌肿瘤治疗线程分类
  • 高效营销系统集成:百度营销的API无代码解决方案,提升电商与广告效率
  • 网络基础(十一):VRRP原理与配置
  • 设计模式——状态模式
  • 2020-XNUCA babyv8
  • 货物数据处理pandas版
  • MC-30A (32.768 kHz用于汽车应用的晶体单元)
  • TrustZone之其他设备及可信基础系统架构
  • 自由编程学习资源:free-programming-books
  • 饥荒Mod 开发(十三):木牌传送
  • Qt/C++音视频开发60-坐标拾取/按下鼠标获取矩形区域/转换到视频源真实坐标
  • Java实现订单超时未支付自动取消的8种方法总结
  • android动态权限申请并展示权限使用说明
  • 论文阅读《DPS-Net: Deep Polarimetric Stereo Depth Estimation》
  • docker文档转译1
  • UE4 图片环形轮播 蓝图
  • 饥荒Mod 开发(十):制作一把AOE武器
  • 微服务实战系列之ZooKeeper(下)
  • FFmpeg项目的组成
  • 计算机网络:数据链路层(广域网、PPP协议、HDLC协议)
  • Spring Boot i18n中文文档
  • 持久化存储 StorageClass