-
Notifications
You must be signed in to change notification settings - Fork 0
/
Array2.cs
115 lines (98 loc) · 1.92 KB
/
Array2.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
/// <summary>
/// 循环数组
/// </summary>
/// <typeparam name="E"></typeparam>
public class Array2 <E>
{
private E[] data;
private int first;
private int last;
private int N;
public Array2(int capacity)
{
data=new E[capacity];
first = 0;
last = 0;
N = 0;
}
public Array2() //重载
{
// 数组开十个空间
data =new E[10];
N = 0;
}
public int Count
{
get { return N; }
}
public bool IsEmpity
{
get { return N == 0; }
}
public void AddLast(E e)
{
if (N==data.Length)
{
//扩容
ResetCapacity(2*data.Length);
}
data[last] = e;
last = (last + 1) % data.Length;
N++;
}
public E RemoveFirst()
{
if (IsEmpity)
{
Debug.Log("数组为空");
}
E net = data[first];// 先把需要删除的数存起来
data[first] = default(E);
first = (first + 1) % data.Length;
N--;
if (N==data.Length/4)
{
// 释放空间 缩容
ResetCapacity(data.Length/2);
}
return net;
}
public E GetFirst()
{
if (IsEmpity)
{
Debug.Log("数组为空");
}
return data[first];
}
private void ResetCapacity(int newCpacity)
{
E[] newData=new E[newCpacity];
for (int i = 0; i < N; i++)
{
newData[i] = data[(first + i) % data.Length];
}
data = newData;
first = 0;
last = N;
}
public override string ToString()
{
StringBuilder res=new StringBuilder();
res.Append("[");
for (int i = 0; i < N; i++)
{
res.Append(data[(first + 1) % data.Length]);
if ((first+i+1)%data.Length!=last)
{
res.Append(",");
}
}
res.Append("]");
return res.ToString();
}
}