C# 数据结构

这篇具有很好参考价值的文章主要介绍了C# 数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、介绍

二、数组

三、List(列表)

四、Dictionary(字典)

五、Queue(队列)

六、Stack(栈)

七、Hashtable(哈希表)

结束


一、介绍

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

它们的逻辑结构通常有:

1.集合:数据结构中的元素之间除了“同属一个集合”的相互关系外,别无其他关系; 
2.线性结构:数据结构中的元素存在一对一的相互关系; 
3.树形结构:数据结构中的元素存在一对多的相互关系; 
4.图形结构:数据结构中的元素存在多对多的相互关系。

下面案例只介绍数据结构中常用的一些用法,因为具体的 API 实在太多了,详细的介绍页可以参考微软的官方文档:

C# 教程 - 概述 | Microsoft Learn

二、数组

可以将同一类型的多个变量存储在一个数组数据结构中。 通过指定数组的元素类型来声明数组。 如果希望数组存储任意类型的元素,可将其类型指定为 object。 

下面是编程语言中常用的数组,由于是一些基础的语法,有点编程基础的人几乎都懂,这里就不做过多的介绍。

int[] intArr = new int[3] { 2, 4, 5 };

这里介绍一下 ArrayList, ArrayList 在我们平时工作中用的非常少,但还是可以了解了解

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ArrayList arr = new ArrayList();

            //向数组中添加数据
            arr.Add(1);
            arr.Add(2);
            arr.Add(3);

            //读取数组中指定索引的值
            Console.WriteLine("arr[0]={0}", arr[0]);

            //获取数组的长度
            int count = arr.Count;

            //数组中是否包含指定的值
            bool b = arr.Contains(3);

            //向指定的下标插入值
            arr.Insert(0, 1);

            //移除指定的元素
            arr.Remove(1);

            //移除指定的下标对应的元素
            arr.RemoveAt(0);

            //清除数组
            arr.Clear();

            Console.ReadKey();
        }
    }
}

三、List(列表)

表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。

List 是一种强类型列表,List 在大多数情况下比ArrayList 执行的更好并且是类型安全的。使用泛型集合需要先引入命名空间 using System.Collections.Generic;

之前写过自定义List 的帖子,这篇帖子会写的更详细一些,有兴趣的可以去了解了解,

链接:点击跳转

常见的用法如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>();

            //向列表中添加元素
            list.Add("a");
            list.Add("b");
            list.Add("c");

            //向列表中 给指定位置插入对应的值
            list.Insert(0, "e");

            //移除列表中指定的元素
            list.Remove("e");

            //移除指定的下标
            list.RemoveAt(0);

            //获取列表的长度
            int count = list.Count;

            //列表是否包含指定的元素
            bool b = list.Contains("a");

            //给列表指定的索引赋值
            list[1] = "f";

            //清空列表
            list.Clear();

            Console.ReadKey();
        }
    }
}

List 的遍历:

using System;
using System.Collections;
using System.Collections.Generic;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<int> list1 = new List<int>() { 2, 3, 56, 34, 64, 23 };

            //for循环遍历
            for (int i = 0; i < list1.Count; i++)
            {
                Console.WriteLine(list1[i]);
            }

            //foreach遍历
            foreach (int i in list1)
            {
                Console.WriteLine(i);
            }

            Console.ReadKey();
        }
    }
}

四、Dictionary(字典)

Dictionary 是存储键和值的集合。Dictionary 是无序的,键 Key 是唯一的

常见的用法如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //创建一个字典对象,
            //Key 的类型是string,Value 的类型是int
            Dictionary<string, int> dic = new Dictionary<string, int>();

            //Add 方法用来添加键值对
            dic.Add("老王",15);
            dic.Add("张三",34);

            //获取当前字典中存储的个数
            Console.WriteLine("字典的个数:{0}" + dic.Count);

            //检查字典中是否包含指定的 Key
            bool isContain = dic.ContainsKey("张三");

            //尝试获取对应的value,如果返回true,则代表获取value成功,否则则为获取失败
            int value = 0;
            bool b = dic.TryGetValue("老王", out value);

            //通过 key 获取 value
            int age = dic["老王"];
            Console.WriteLine("老王的年龄是:" + age);

            //清除字典
            dic.Clear();

            Console.ReadKey();
        }
    }
}

字典的遍历

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Dictionary<int, string> dict = new Dictionary<int, string>()
            {
                [10] = "A10",
                [20] = "A20",
                [30] = "A30",
                [40] = "A40",
                [50] = "A50"
            };

            //方式1
            foreach (var key in dict.Keys)
            {
                Console.WriteLine($"key={key},value={dict[key]}");
            }

            //方式2
            List<int> list = new List<int>(dict.Keys);
            for (int i = 0; i < dict.Count; i++)
            {
                Console.WriteLine("key:{0},value:{1}", list[i], dict[list[i]]);
            }   

            Console.ReadKey();
        }
    }
}

五、Queue(队列)

表示对象的先进先出集合。

常见的用法如下:

using System;
using System.Collections.Generic;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Queue<string> queue = new Queue<string>();

            //向队列中添加元素
            queue.Enqueue("老一");
            queue.Enqueue("老二");
            queue.Enqueue("老三");

            //获取队列的数量
            int count = queue.Count;
            //队列中是否包含指定的 value
            bool b = queue.Contains("老王");

            //Peek方法是返回顶部的对象而不将其从堆栈中移除
            string names = queue.Peek();

            //获取队列中的元素
            //每次调用 Dequeue 方法,获取并移除队列中队首的元素
            string s1 = queue.Dequeue();
            Console.WriteLine(s1);
            string s2 = queue.Dequeue();
            Console.WriteLine(s2);
            string s3 = queue.Dequeue();
            Console.WriteLine(s3);

            //清空队列
            queue.Clear();


            Console.ReadKey();
        }
    }
}

六、Stack(栈)

表示对象的简单后进先出 (LIFO) 非泛型集合。

常见的用法如下:

using System;
using System.Collections.Generic;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Stack<string> stack = new Stack<string>();

            //将元素入栈
            stack.Push("a");
            stack.Push("b");
            stack.Push("c");

            //栈的元素个数
            int count = stack.Count;
            //是否包含指定的元素
            bool b = stack.Contains("a");

            //Stack.Peek() 方法返回顶部的对象而不将其从堆栈中移除
            string name = stack.Peek();

            // Pop 把元素出栈,栈中就没有这个元素了
            string s1 = stack.Pop();
            Console.WriteLine(s1);
            string s2 = stack.Pop();
            Console.WriteLine(s2);
            string s3 = stack.Pop();
            Console.WriteLine(s3);

            Console.ReadKey();
        }
    }
}

七、Hashtable(哈希表)

表示根据键的哈希代码进行组织的键/值对的集合。

常见的用法如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();

            //添加keyvalue键值对
            ht.Add("E", "e");
            ht.Add("A", "a");
            ht.Add("C", "c");
            ht.Add("B", "b"); 
            
            //获取哈希 key 对应的 value
            string s = (string)ht["A"];
            Console.WriteLine(s);
            Console.WriteLine(ht["A"]);

            //判断哈希表是否包含指定的 key
            bool b = ht.Contains("E");
            //哈希表的个数
            int count = ht.Count;

            //移除一对键值对
            ht.Remove("C");

            //移除所有元素
            ht.Clear();

            Console.ReadKey();
        }
    }
}

哈希表的遍历

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();

            //添加keyvalue键值对
            ht.Add("E", "e");
            ht.Add("A", "a");
            ht.Add("C", "c");
            ht.Add("B", "b");

            //遍历方法一:遍历哈希表中的键
            foreach (string key in ht.Keys)
            {
                //Console.WriteLine(string.Format("{0}-{1}"), key, ht[key]);
                Console.WriteLine(string.Format("{0}-{1}", key, ht[key]));
            }

            //遍历方法二:遍历哈希表中的值
            foreach (string value in ht.Values)
            {
                Console.WriteLine(value);
            }

            //遍历方法三:遍历哈希表中的键值
            foreach (DictionaryEntry de in ht)
            {
                Console.WriteLine(string.Format("{0}-{1}", de.Key, de.Value));
            }

            Console.ReadKey();
        }
    }
}

结束

如果这个帖子对你有所帮助,欢迎 关注 + 点赞 + 留言

end文章来源地址https://www.toymoban.com/news/detail-565335.html

到了这里,关于C# 数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • asp.net老年大学教务管理信息系统VS开发sqlserver数据库web结构c#编程

    一、源码特点         asp.net 老年大学教务管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使 用c#语言开发 asp.net老年大学教务管理系统 应用技术:asp.net c#+sqlserver 开发工具:

    2024年02月07日
    浏览(67)
  • asp.net古代服饰系统VS开发sqlserver数据库web结构c#编程包含购物答题功能点

    一、源码特点         asp.net 古代服饰系统 是一套完善的web设计管理系统(含购物 答题),系统采用mvc模式(BLL+DAL+ENTITY)系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net 月下逢古代服饰系统1 二、功能

    2024年02月07日
    浏览(50)
  • asp.net酒店管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net酒店管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net 酒店管理系统1 二、功能介绍 后台主要功能: (1)用户管理:对用户信息进行添

    2024年02月07日
    浏览(57)
  • asp.net文档管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net文档管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net文档管理系统 二、功能介绍 (1)用户管理:对用户信息进行添加、删除、修改和

    2024年02月08日
    浏览(47)
  • asp.net归宿管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net归宿管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net归宿管理系统VS开发sqlserver数据库w 二、功能介绍 一、定时打卡(采用RFID卡)

    2024年02月09日
    浏览(66)
  • asp.net个人信息管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net个人信息管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 asp.net个人信息管理系统VS开发sqlserver数 二、功能介绍 (1)用户管理:对用户信息

    2024年02月05日
    浏览(57)
  • asp.net审计项目管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net审计项目管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 二、功能介绍 (1)科室管理:对科室信息进行添加、删除、修改和查看 (2)权限管

    2024年02月11日
    浏览(55)
  • asp.net教师调课系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net教师调课管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net教师调课系统VS开发sqlserver数据库w 二、功能介绍 教师调课系统要满足以下

    2024年02月09日
    浏览(54)
  • asp.net卷烟物价管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net卷烟物价管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net卷烟物价管理系统VS开发sqlserver数 二、功能介绍 (1)用户管理:对用户信息

    2024年02月11日
    浏览(48)
  • asp.net高校食谱管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net高校食谱管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 asp.net高校食谱管理系统VS开发sqlserver数据 二、功能介绍 (1)用户管理:对用户信

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包