C# 数据结构

Array,ArrayList,List<T>,LinkedList<T>,Queue<T>,Stack<T>,Dictionary<K,T>

1、Array

    初始化时确定空间占用,无法增加元素个数。

        static void Main(string[] args)
        {
            int[] array = new int[5] { 3,2,1,5,4};//固定容量,创建后无法新增元素
            array[0] = 0;//删除元素,直接赋值0
            array[1] = 6;//改元素,直接赋值
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);//查元素
            }
            Console.ReadLine();
        }

2、ArrayList

    所有元素均为Object,所以存在很多装箱拆箱,大量数据时会很耗性能。

        static void Main(string[] args)
        {
            ArrayList list = new ArrayList(new int[5] { 1,2,3,4,5});
            list.Add(6);//增加元素
            list.AddRange(new int[2]{ 7,8});//按范围增加多个元素
            list.Remove(1);//删除元素
            list.RemoveAt(2);//按下标删除元素
            list[0] = 100;//改
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);//查
            }
            Console.ReadLine();
        }

3、List<T>

    泛型可以在创建是确定需要的类型,避免了ArrayList中装箱拆箱的操作。

        static void Main(string[] args)
        {
            List<int> list = new List<int>();
            list.Add(1);//增加元素
            list.AddRange(new int[2]{ 2,3});//按范围增加多个元素
            list.Remove(1);//删除元素
            list[0] = 100;//改
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);//查
            }
            Console.ReadLine();
        }

4、LinkedList<T>

    MSDN:点击打开链接

    链表在内存中不是连续存储。

  • 向链表中插入或删除节点无需调整结构的容量。添加和删除速度比数组快。
  • 链表适合在需要有序的排序的情境下增加新的元素。例如要在数组中间某个位置增加新的元素,数组需要移动很多元素, 链表只需调整添加位置两边的元素指向即刻。
  • 由于其在内存空间中不一定是连续排列,所以访问时候无法利用下标,而是必须从头结点开始,逐次遍历下一个节点直到寻找到目标。所以当需要快速访问对象时,数组无疑更有优势。
        static void Main(string[] args)
        {
            LinkedList<int> list = new LinkedList<int>();
            list.AddFirst(1);//增加开始位置元素
            list.AddLast(2);//增加末尾位置元素
            list.AddLast(3);
            list.RemoveFirst();//删除开始位置元素
            list.Remove(3);//删除指定元素
            
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

5、Queue<T>

    队列:先进先出。MSDN:点击打开链接

        static void Main(string[] args)
        {
            Queue<int> queue = new Queue<int>();
            queue.Enqueue(1);//增加元素到队尾
            queue.Enqueue(2);
            queue.Enqueue(3);
            queue.Dequeue();//删除队首元素,最先加入到队列中的元素
            //Console.WriteLine(queue.Peek()); 查询队列首位元素,但不移除该元素

            foreach (var item in queue)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }
6、Stack<T>

    MSDN:点击打开链接

    与Queue<T>类似,这里是先进后出。

        static void Main(string[] args)
        {
            Stack<int> stack = new Stack<int>();
            stack.Push(1);//增加元素
            stack.Push(2);
            stack.Push(3);
            stack.Pop();//删除最后末尾元素
            //int sum = stack.Sum();//求和
            //int num = stack.Peek();//返回最顶部元素,不移除

            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

7、Dictionary<K,T>

    MSDN:点击打开链接

        static void Main(string[] args)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            dic.Add("A", 1);//增
            dic.Add("B", 2);
            dic.Add("C", 3);
           // dic.Remove("A");//删
            dic["B"] = 4;//改
            foreach (var item in dic)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

8、总结


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值