C#数据结构与算法—动态数组

本文探讨了C#中的数据结构重点——动态数组,详细讲解了数组的方法,包括扩容和缩容,并通过实例展示了如何在实际操作中高效使用。同时对比了List与ArrayList的区别,强调List对类型的限制以及泛型在存储任意类型元素中的优势,最后介绍了泛型方法及其测试结果。
摘要由CSDN通过智能技术生成
  • 数据结构主要研究的是数据怎么在计算机中组织和存储,是的我们可以高效的获取数据或修改数据。
  • 算法可以节约更多的资源,让我们完成一些看起来本不该完成的任务,可将程序的运行速度提高数百万倍。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    数组的各种方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataStructure
{
   
    class Array1
    {
   
        private int[] data;//使用私有的是为了防止外部的成员访问数组,对其造成破坏
        private int N;//动态数组实际存在的变量数
        public Array1(int capacity)//方法 
        {
   
            data = new int[capacity];
            N = 0;
        }

        public Array1() : this(10) {
    }//等价于下方的方法
        //public Array1()
        //{
   
        //    data = new int[10];
        //    N = 0;
        //}
        public int Capacity//数组容量
        {
   
            get {
    return data.Length; }
        }
        public int Count//数组真实存储元素的个数
        {
   
            get {
    return N; }
        }
        public bool IsEmpty
        {
   
            get {
    return N == 0; }//=0返回true
        }

        //往数组添加元素 
        public void Add(int index, int e)//在数组index位置(此位置已有元素)添加元素
        {
   
            if(index<0||index>N)
            {
   
            throw new ArgumentException("数组索引越界");
            }
            if(N==data.Length)
            {
   
                ResetCapacity(2*data.Length);
            }

            for (int i = N - 1; i >= index; i--)//从index到N-1的元素都向后移动
            {
   
                data[i + 1] = data[i];
            }
            data[index] = e;
            N++;
        }
        public void AddLast(int e)//在数组的末尾添加元素

        {
   
            Add(N, e);
        }
        public void AddFirst(int e)//在数组首位添加元素
        {
   
            Add(0, e);
        }
        //查询数组元素方法
        public int Get(int index)
        {
   
            if(index<0||index>=N)
            {
   
                throw new ArgumentException("数组索引越界");
            }
            return data[index];
        }

        public int GetFirst()
        {
   
            return Get(0);
        }
        
        public int GetLast()
        {
   
            return Get(N - 1);
        }
        
        //数组中是否包含某元素
        public bool Contains(int e)
        {
   
            for(int i=0;i<N;i++)
            {
   
                if(data[i]==e)
                {
   
                    return true;
                }
            }
            return false;
        }
        //查看数组元素存在哪个位置
        public int IndexOf(int e)
        {
   
            for (int i = 0; i < N; i++)
            {
   
                if (data[i] == e)
                {
   
                    return i;
                }
            }
            return -1;
        }
        //删除数组里某个位置的元素
        public int RemoveAt(int index)
        {
   
            if(index<0||index>=N)
            {
   
                throw new ArgumentException("索引超出数组界限");
            }
            int del = data[index];
            for(int i=index+1;i<=N-1;i++)
            {
   
                data[i - 1] = data[i];
            }
            N--;
            data[N] = default(int);
            if (N == data.Length / 4)
                ResetCapacity(data.Length / 2);  
            return del;
        }

        //简便方法
        public int RemoveFirst()
        {
   
            return RemoveAt(0);
        }
        public int RemoveLast()
        {
   
            return RemoveAt(N - 1);
        }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值