C# 数据结构全面解析

news2025/1/20 6:38:11

在 C# 编程的世界里,数据结构是构建高效程序的基石。合理运用数据结构,能够优化数据的存储和访问方式,显著提升程序的性能。本文将深入探讨 C# 中常见的数据结构及其应用场景。

一、数据结构基础概念

数据结构是一种组织和存储数据的方式,它定义了数据之间的关系以及可以对数据执行的操作。在 C# 中,数据结构可以分为两类:值类型和引用类型。值类型直接存储数据值,例如int、double等基本数据类型;引用类型存储数据的引用,如class、interface等。良好的数据结构设计可以提高程序的可读性、可维护性和执行效率。

二、数组(Array)

数组是 C# 中最基本的数据结构之一,它是一种有序的、固定大小的同类型数据集合。数组的元素可以通过索引来访问,索引从 0 开始。

1. 数组的声明和初始化

 
// 声明一个整数数组

int[] numbers;

// 初始化数组,包含5个元素

numbers = new int[5];

// 声明并初始化数组的另一种方式

int[] scores = { 85, 90, 78, 95, 88 };

2. 数组的访问和遍历


// 访问数组元素

int firstNumber = numbers[0];

// 遍历数组

foreach (int number in numbers)

{

Console.WriteLine(number);

}

三、列表(List<T>)

List<T>是 C# 提供的一个泛型集合类,它类似于数组,但大小是动态的,可以根据需要自动增长。

1. List<T>的声明和初始化

 
// 声明一个字符串列表

List<string> names = new List<string>();

// 初始化并添加元素

List<int> ages = new List<int>() { 20, 22, 25, 28 };

2. List<T>的常用操作


// 添加元素

names.Add("Alice");

// 插入元素

names.Insert(0, "Bob");

// 删除元素

names.Remove("Alice");

// 获取元素数量

int count = names.Count;

四、链表(Linked List)

链表是一种动态数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的引用。链表的优点是插入和删除操作效率高,缺点是随机访问效率低。

1. 链表的简单实现


class Node

{

public int Data { get; set; }

public Node Next { get; set; }

public Node(int data)

{

Data = data;

Next = null;

}

}

class LinkedList

{

private Node head;

public void Add(int data)

{

Node newNode = new Node(data);

if (head == null)

{

head = newNode;

}

else

{

Node current = head;

while (current.Next!= null)

{

current = current.Next;

}

current.Next = newNode;

}

}

public void PrintList()

{

Node current = head;

while (current!= null)

{

Console.Write(current.Data + " ");

current = current.Next;

}

Console.WriteLine();

}

}

2. 使用链表


LinkedList list = new LinkedList();

list.Add(10);

list.Add(20);

list.Add(30);

list.PrintList();

五、栈(Stack<T>)

栈是一种后进先出(LIFO)的数据结构,就像一叠盘子,最后放上去的盘子最先被取下来。在 C# 中,Stack<T>类提供了栈的功能。

1. Stack<T>的声明和初始化

 
// 声明一个整数栈

Stack<int> stack = new Stack<int>();

2. Stack<T>的常用操作


// 入栈

stack.Push(10);

stack.Push(20);

// 出栈

int poppedValue = stack.Pop();

// 获取栈顶元素但不出栈

int peekValue = stack.Peek();

六、队列(Queue<T>)

队列是一种先进先出(FIFO)的数据结构,类似于排队,先到的人先接受服务。在 C# 中,Queue<T>类实现了队列的功能。

1. Queue<T>的声明和初始化

 
// 声明一个字符串队列

Queue<string> queue = new Queue<string>();

2. Queue<T>的常用操作


// 入队

queue.Enqueue("Apple");

queue.Enqueue("Banana");

// 出队

string dequeuedValue = queue.Dequeue();

// 获取队列头部元素但不出队

string peekValue = queue.Peek();

七、总结

C# 提供了丰富的数据结构来满足不同的编程需求。在实际开发中,需要根据具体的应用场景选择合适的数据结构。例如,当需要快速随机访问元素时,数组或列表可能是较好的选择;而当需要高效的插入和删除操作时,链表更合适;栈和队列则适用于特定的算法和数据处理逻辑。希望通过本文的介绍,你能对 C# 数据结构有更深入的理解和掌握,从而在编程中编写出更高效、更健壮的代码。如果在学习过程中有任何疑问,欢迎在评论区留言交流。

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

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

相关文章

Java基础--类和对象

目录 什么是类&#xff1f; 什么是对象 为什么java会设计对象 Java对象该怎么用 程序执行流程 类的加载顺序 什么是类&#xff1f; 类是构建对象的模板&#xff0c;一个类可以创建多个对象&#xff0c;每个对象的数据的最初来源来自对象 public class Student{public in…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)

重新创建WebApi项目&#xff0c;安装Microsoft.AspNetCore.Authentication.JwtBearer包&#xff0c;将之前JwtBearer测试项目中的初始化函数&#xff0c;jwt配置类、token生成类全部挪到项目中。   重新编写login函数&#xff0c;之前测试Cookie和Session认证时用的函数适合m…

Electron实践继续

文章目录 前言一、知识储备前提二、开发工具集&#xff08;一&#xff09;代码编辑器之选&#xff08;二&#xff09;命令行工具运用&#xff08;三&#xff09;Git 与 GitHub 协作利器&#xff08;四&#xff09;Node.js 与 npm 核心环境 你的第一个Electron应用程序 前言 上…

《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统

和组合导航一样&#xff0c;也可以通过预积分 IMU 因子加上雷达残差来实现基于预积分和图优化的紧耦合 LIO 系统。一些现代的 Lidar SLAM 系统也采用了这种方式。相比滤波器方法来说&#xff0c;预积分因子可以更方便地整合到现有的优化框架中&#xff0c;从开发到实现都更为便…

【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮

1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度&#xff0c;来添加对应的按钮和样式&#xff1b;使用 CSS 的浮动效果&#xff0c;参考CSS 实现超过固定高度后出现展开折叠按钮&#xff1b;使用容器查询 – container 语法&#xff1b;使用 clamp 函数进行样式判断。 3. 优…

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;基本功能判空const修饰 4.2 第二版&#xff1a;优化对于\0的单独拷贝 4.3 第三版&#xff1a;仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节&#xff0c;把之前做的项目拿过来总结一下&#xff0c;自己写的一个…

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法&#xff0c;将外界的天地灵气吸入体内&#xff0c;初步改造身体&#xff0c;使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

快速入门:如何注册并使用GPT

文章目录 ProtonMail邮箱步骤 1&#xff1a;访问Proton官网步骤 2&#xff1a;创建ProtonMail账户步骤 3&#xff1a;选择注册免费账户步骤 4&#xff1a;填写邮箱地址和手机号&#xff08;可选&#xff09;步骤 5&#xff1a;邮箱验证&#xff08;必须进行验证&#xff09;步骤…

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…

Vulnhub DC-8靶机攻击实战(一)

导语   Vulnhub DC-8靶机教程来了,好久没有更新打靶的教程了,这次我们在来更新一期关于Vulnhub DC-8的打靶训练,如下所示。 安装并且启动靶机 安装并且启动靶机,如下所示。 开始信息采集 进入到Kali中,通过如下的命令来查找到靶机的IP地址。 arp-scan -l根据上面的结…

自学SpringBoot笔记

概念 什么是SpringBoot&#xff1f; Spring Boot 是基于 Spring Framework 的一款开源框架&#xff0c;主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置&#xff0c;让开发者可以快速构建生产级别的独立应用程序&#xff0c;而无需手动配…

通过学习更多样化的生成数据进行更广泛的数据分发来改进实例分割

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 本次使用的英文整理的一些记录&#xff0c;练习一下为后续SCI发表论文打好基础 Improving Instance Segmentation by Learning Wider Data Distribution with More Diverse Generative Data Abstract In…

USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技

信息社会的发展&#xff0c;在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息 与信号处理技术的整个面貌&#xff0c;而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键 性、乃至决定性的作用&#xff0c;其应用已经深…

提示词的艺术----AI Prompt撰写指南(个人用)

提示词的艺术 写在前面 制定提示词就像是和朋友聊天一样&#xff0c;要求我们能够清楚地表达问题。通过这个过程&#xff0c;一方面要不断练习提高自己地表达能力&#xff0c;另一方面还要锻炼自己使用更准确精炼的语言提出问题的能力。 什么样的提示词有用&#xff1f; 有…

自定义提示确认弹窗-vue

最初可运行代码 弹窗组件代码&#xff1a; &#xff08;后来发现以下代码可运行&#xff0c;但打包 typescript 类型检查出错&#xff0c;可打包的代码在文末&#xff09; <template><div v-if"isVisible" class"dialog"><div class&quo…

【JavaEE】Spring(1)

一、什么是Spring和SpringBoot Spring是Java应用程序的开发框架&#xff0c;其目的就是为了简化Java开发&#xff1b;SpringBoot是在spring框架的基础上构建的一个快速开发框架&#xff0c;其作用是进一步简化Spring程序开发 二、SpringBoot项目 2.1 创建项目 1. 设置jdk版本…

【Rust自学】13.4. 闭包 Pt.4:使用闭包捕获环境

13.4.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发&#xff0c;而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中&#xff0c;我们会讨论 Rust 的一…

浅谈操作系统与初识Linux

一、Linux操作系统的出现 1.1操作系统的出现以及相关的四个要素 1.2最早出现的操作系统及其创始人 起初&#xff0c;IBM为了让计算机可以以更低技术成本进行使用&#xff0c;以此来售卖计算机&#xff1b; 为计算机搭载上了Unix操作系统&#xff0c;Unix由肯汤普森用汇编语…

K8S开启/关闭审计日志

K8S默认禁用审计 开启/关闭 k8s 审计日志 默认 Kubernetes 集群不会输出审计日志信息。通过以下配置&#xff0c;可以开启 Kubernetes 的审计日志功能。 准备审计日志的 Policy 文件配置 API 服务器&#xff0c;开启审计日志重启并验证 准备审计日志 Policy 文件 apiVersio…