数组
- 数组的定义:数组是具有一定顺序关系的若干对象组成的集合,组成数组的对象称为数组元素
int[,] a = new int[2, 3];
//定义一个两行散列的数组
//静态数组
int[][] b = new int[2][];
//定义行数,列数可变
- 数组名表示群体的共性,即具有同一种数据类型
- 下标表示个体的个性,即各自占有独立的单元
数组的存储
- n维数组的定义 :下标由n个数组成的数组称为n维数组
int[] a = new int[10];//一维数组
int[,] a = new int[2,3];//二维数组
int[, ,] a = new int[2,3,4];//三维数组
数组存储的特点
- 数组元素在内存中按顺序连续存储
- 数组的存储分配按照行(C,C++,C#)或列(Forturn)进行
- 数组名表示该数组的首地址,是常量
常用数组的存储 - 一维数组
a[n]
- 二维数组
a[m,n]
注:i
从0变为1需要走一行也就是c*n
,j
从0变为1只需要走c
- 三维数组
a[m,n,l]
注:i
从0变为1需要走一页即n*l
个元素,j
从0变为1需要走l
个元素,k
从0变为1走一个元素
静态数组与动态数组
静态数组
- 在程序编译时分配空间的数组
int[] a = new int[10];//静态数组(声明之后数组长度不可改变)
动态数组
- 在程序运行时分配空间的数组(声明之后数组长度可根据问题而调整)
using System.Collections;//定义好了各种集合类
//ArrayList
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DataStruct2020.demo
{
public class DArray<T>where T : IComparable<T>
{
private T[] _array;
private int _size;
public int Size
{
get { return _size; }
}
public DArray(int size)
{
if (size <= 0)
throw new ArgumentOutOfRangeException();
_size = size;
_array = new T[size];
}
public T this[int index]
{
get
{
if (index < 0 || index > _size - 1)
throw new ArgumentOutOfRangeException();
return _array[index];
}
set
{
if (index < 0 || index > _array.Length)
throw new ArgumentOutOfRangeException();
_array[index] = value;
}
}
public void ReSize(int newSize)
{
if (newSize <= 0)
throw new ArgumentOutOfRangeException();
if (newSize == _size)
return;
T[] temp = new T[newSize];
int min = _size < newSize ? _size : newSize;
for (int i = 0; i < min; i++)
{
temp[i] = _array[i];
}
_array = temp;
_size = newSize;
}
}
}