C#数据结构学习笔记——数组

本文是关于C#数据结构的学习笔记,重点介绍了数组的使用,包括静态数组和动态数组如ArrayList与List。讨论了装箱和拆箱的概念及其对性能的影响,并强调了泛型在提高性能和保证类型安全方面的优势。
摘要由CSDN通过智能技术生成

1 数组

1.1 C#中的数组

静态数组:int[] float[] double[] char[] string[]

特点:创建后容量无法改变

例如:

​ int[] arr = new int[10]

动态数组:ArrayList List(泛型)

特点:根据元素的数量,动态地调整数组的容量大小

class Program
    {
   
        static void Main(string[] args)
        {
   
            //数组
            int[] arr = new int[10];
            for (int i = 0; i < 10; i++)
            {
   
                arr[i] = i;
                Console.Write(arr[i] + " ");
            }
            Console.WriteLine();

            //动态数组ArrayList
            ArrayList a = new ArrayList(10);
            for (int i = 0; i < 15; i++)
            {
   
                a.Add(i);
                Console.Write(a[i] + " ");
            }
            Console.WriteLine();

            //泛型动态数组
            List<int> l = new List<int>(10);
            for (int i = 0; i < 15; i++)
            {
   
                l.Add(i);
                Console.Write(l[i] + " ");
            }

            Console.Read();
        }
}

在这里插入图片描述

1.2 实现一个存储整型元素的动态数组

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

namespace DataStructure
{
   
    class Array1//编写动态数组框架
    {
   
        private int[] data;//存储元素的静态数组data
        private int N;//存储元素个数N

        public Array1(int capacity)//有参构造
        {
   
            data = new int[capacity];
            N = 0;
        }

        public Array1() : this(10) {
    }//无参构造
        //public Array1()
        //{
   
        //    data = new int[10];
        //    N = 0;
        //}

        private void ResetCapacity(int newCapacity)//重构数组容量,并把原有元素存储
        {
   
            int[] newData = new int[newCapacity];
            for (int i = 0; i < N; i++)
                newData[i] = data[i];

            data = newData;
        }

        public int Capacity//获取数组容量
        {
   
            get {
    return data.Length; }
        }

        public int Count//获取数组元素个数
        {
   
            get {
    return N; }
        }

        public bool IsEmpty//判断数组是否为空
        {
   
            get {
    return N == 0; }
        }

        public void Add(int index,int e)//添加元素到数组中的指定索引位置
        {
   
            if (index < 0 || index > N)//判断索引位置是否合法
                throw new ArgumentException("数组索引越界");

            if (N == data.Length)//判断数组容量是否满了
                ResetCapacity(2 * data.Length);

            for (int i= N-1;i >= index; i--)//从数组末尾向后移动元素
                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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值