封裝一個數組類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace 封裝數組類
{
class Program
{
static void Main(string[] args)
{
ArrayList alist = new ArrayList();
alist.Add(1);
alist.Add(2);
//alist.RemoveAt(3);
//Console.WriteLine(alist[3]);
MyArrayList<string> myL = new MyArrayList<string>(9);
myL[0] = "12";
myL[1] = "2";
myL[2] = "13";
myL[3] = "21";
myL[4] = "e";
myL[5] = "b";
myL[6] = "a";
myL[7] = "e";
myL[8] = "a";
#region 測試
//myL.UnShift(3);
//myL.Push(4);
//myL.Shift();
//myL.Pop();
//int index = myL.IndexOf(3,4);
//Console.WriteLine("搜尋的下標爲:{0}",index);
//index = myL.LastIndexOf(3);
//Console.WriteLine("搜尋的下標爲:{0}", index);
//myL.Splice(1, 1);
//for (int i = 0; i < myL.Len; i++)
//{
// Console.WriteLine(myL[i]);
//}
#endregion
//myL.UnShift(9);
//int[] a = { 9, 9, 9, 9 };
//myL.Concat(a);
//myL.Reverse();
//myL.Repeat(1, 89);
myL.Sort();
//myL.Repeat("a","as");
for (int i = 0; i < myL.Len; i++)
{
Console.WriteLine(myL[i]);
}
Console.ReadKey();
}
}
class MyArrayList<T>
{
T[] arr = null; //數組
T[] brr = null; //中間數組
int len = 0; //數組長度
//構造函數
public MyArrayList(int i)
{
len = i; //通過構造函數定義容器長度
arr = new T[len];
}
//數組長度的屬性
public int Len
{
get { return len; }
}
//索引器
public T this[int index]
{
get { return arr[index]; }
set { arr[index] = value; }
}
//在數組首位添加一個新的元素
public void UnShift(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[0] = t;
for (int i = 0; i < len; i++)
{
arr[i + 1] = brr[i];
}
len = arr.Length;
brr = null;
}
//在數組尾部添加一個新的元素
public void Push(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[arr.Length-1] = t;
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
}
//刪除首位的第一個元素並返回元素
public T Shift()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T firstElement = brr[0];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i + 1];
}
len = arr.Length;
brr = null;
return firstElement;
}
//刪除尾部最後一個元素並返回
public T Pop()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T lastElement = brr[len-1];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
return lastElement;
}
//splice(開始添加或刪除的下標,刪除的個數,添加的元素)
public void Splice(int IOindex, int IOcount)
{
int index = IOindex;
int count = IOcount;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count];
//i是原來數組的索引,j是新數組的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
i = i + count;
}
arr[j] = brr[i];
}
len = arr.Length;
brr = null;
}
public void Splice(int IOindex, int IOcount, params T[] a)
{
int index = IOindex;
int count = IOcount;
T[] add = a;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count + add.Length];
//i是原來數組的索引,j是新數組的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
for (int k = 0; k < add.Length; k++)
{
arr[j] = add[k];
j++;
}
j--;
i = i + count - 1;
}
else
{
arr[j] = brr[i];
}
}
len = arr.Length;
brr = null;
}
//IndexOf(要查詢的元素);IndexOf(要查詢的元素,開始查詢的下標);LastIndexOf(要查詢的元素)
public int IndexOf(T t)
{
int index = -1;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int IndexOf(T t, int IOindex)
{
int index = -1;
for (int i = IOindex; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int LastIndexOf(T t)
{
int index = -1;
for (int i = arr.Length - 1; i >= 0; i--)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
//concat()把新數組連接到老數組的後面
public void Concat(T[] t)
{
brr = new T[len];
brr = arr;
arr = new T[len + t.Length];
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
for (int i = len, j = 0; i < arr.Length; i++, j++)
{
arr[i] = t[j];
}
len = arr.Length;
brr = null;
}
//reverse()倒序
public void Reverse()
{
brr = new T[len];
brr = arr;
arr = new T[len];
for (int i = 0; i < len; i++)
{
arr[len - i - 1] = brr[i];
}
brr = null;
}
//sort()按順序從小到大
#region
//public void Sort()
//{
// brr = new T[len];
// brr = arr;
// arr = new T[len];
// for (int i = 0; i < len; i++)
// {
// T tMin = brr.Min(); //原數組最小元素
// arr[i] = tMin; //最小元素賦給新數組
// //原數組減去最小元素
// //最小元素的位置
// int index = 0;
// for (int z = 0; z < brr.Length; z++)
// {
// if (brr[z].Equals(tMin))
// {
// index = z;
// break;
// }
// }
// //去除最小元素 形成新數組
// T[] crr = brr;
// brr = new T[brr.Length - 1];
// for (int j = 0, k = 0; j < brr.Length; j++, k++) {
// if (j == index) {
// k++;
// }
// brr[j] = crr[k];
// }
// }
// brr = null;
//}
#endregion
public void Sort() {
for (int i = 0; i < arr.Length; i++) {
for (int j = 0; j < i; j++) {
if (arr[i].ToString().CompareTo(arr[j].ToString())<0)
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//repeat(int i, T value);修改 repeat(T oldvalue,T newvalue)
public void Repeat(int IOindex, T value)
{
arr[IOindex] = value;
}
public void Repeat(T oldvalue, T newvalue)
{
int index = IndexOf(oldvalue);
if (index != null)
{
arr[index] = newvalue;
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace 封裝數組類
{
class Program
{
static void Main(string[] args)
{
ArrayList alist = new ArrayList();
alist.Add(1);
alist.Add(2);
//alist.RemoveAt(3);
//Console.WriteLine(alist[3]);
MyArrayList<string> myL = new MyArrayList<string>(9);
myL[0] = "12";
myL[1] = "2";
myL[2] = "13";
myL[3] = "21";
myL[4] = "e";
myL[5] = "b";
myL[6] = "a";
myL[7] = "e";
myL[8] = "a";
#region 測試
//myL.UnShift(3);
//myL.Push(4);
//myL.Shift();
//myL.Pop();
//int index = myL.IndexOf(3,4);
//Console.WriteLine("搜尋的下標爲:{0}",index);
//index = myL.LastIndexOf(3);
//Console.WriteLine("搜尋的下標爲:{0}", index);
//myL.Splice(1, 1);
//for (int i = 0; i < myL.Len; i++)
//{
// Console.WriteLine(myL[i]);
//}
#endregion
//myL.UnShift(9);
//int[] a = { 9, 9, 9, 9 };
//myL.Concat(a);
//myL.Reverse();
//myL.Repeat(1, 89);
myL.Sort();
//myL.Repeat("a","as");
for (int i = 0; i < myL.Len; i++)
{
Console.WriteLine(myL[i]);
}
Console.ReadKey();
}
}
class MyArrayList<T>
{
T[] arr = null; //數組
T[] brr = null; //中間數組
int len = 0; //數組長度
//構造函數
public MyArrayList(int i)
{
len = i; //通過構造函數定義容器長度
arr = new T[len];
}
//數組長度的屬性
public int Len
{
get { return len; }
}
//索引器
public T this[int index]
{
get { return arr[index]; }
set { arr[index] = value; }
}
//在數組首位添加一個新的元素
public void UnShift(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[0] = t;
for (int i = 0; i < len; i++)
{
arr[i + 1] = brr[i];
}
len = arr.Length;
brr = null;
}
//在數組尾部添加一個新的元素
public void Push(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[arr.Length-1] = t;
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
}
//刪除首位的第一個元素並返回元素
public T Shift()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T firstElement = brr[0];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i + 1];
}
len = arr.Length;
brr = null;
return firstElement;
}
//刪除尾部最後一個元素並返回
public T Pop()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T lastElement = brr[len-1];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
return lastElement;
}
//splice(開始添加或刪除的下標,刪除的個數,添加的元素)
public void Splice(int IOindex, int IOcount)
{
int index = IOindex;
int count = IOcount;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count];
//i是原來數組的索引,j是新數組的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
i = i + count;
}
arr[j] = brr[i];
}
len = arr.Length;
brr = null;
}
public void Splice(int IOindex, int IOcount, params T[] a)
{
int index = IOindex;
int count = IOcount;
T[] add = a;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count + add.Length];
//i是原來數組的索引,j是新數組的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
for (int k = 0; k < add.Length; k++)
{
arr[j] = add[k];
j++;
}
j--;
i = i + count - 1;
}
else
{
arr[j] = brr[i];
}
}
len = arr.Length;
brr = null;
}
//IndexOf(要查詢的元素);IndexOf(要查詢的元素,開始查詢的下標);LastIndexOf(要查詢的元素)
public int IndexOf(T t)
{
int index = -1;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int IndexOf(T t, int IOindex)
{
int index = -1;
for (int i = IOindex; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int LastIndexOf(T t)
{
int index = -1;
for (int i = arr.Length - 1; i >= 0; i--)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
//concat()把新數組連接到老數組的後面
public void Concat(T[] t)
{
brr = new T[len];
brr = arr;
arr = new T[len + t.Length];
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
for (int i = len, j = 0; i < arr.Length; i++, j++)
{
arr[i] = t[j];
}
len = arr.Length;
brr = null;
}
//reverse()倒序
public void Reverse()
{
brr = new T[len];
brr = arr;
arr = new T[len];
for (int i = 0; i < len; i++)
{
arr[len - i - 1] = brr[i];
}
brr = null;
}
//sort()按順序從小到大
#region
//public void Sort()
//{
// brr = new T[len];
// brr = arr;
// arr = new T[len];
// for (int i = 0; i < len; i++)
// {
// T tMin = brr.Min(); //原數組最小元素
// arr[i] = tMin; //最小元素賦給新數組
// //原數組減去最小元素
// //最小元素的位置
// int index = 0;
// for (int z = 0; z < brr.Length; z++)
// {
// if (brr[z].Equals(tMin))
// {
// index = z;
// break;
// }
// }
// //去除最小元素 形成新數組
// T[] crr = brr;
// brr = new T[brr.Length - 1];
// for (int j = 0, k = 0; j < brr.Length; j++, k++) {
// if (j == index) {
// k++;
// }
// brr[j] = crr[k];
// }
// }
// brr = null;
//}
#endregion
public void Sort() {
for (int i = 0; i < arr.Length; i++) {
for (int j = 0; j < i; j++) {
if (arr[i].ToString().CompareTo(arr[j].ToString())<0)
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//repeat(int i, T value);修改 repeat(T oldvalue,T newvalue)
public void Repeat(int IOindex, T value)
{
arr[IOindex] = value;
}
public void Repeat(T oldvalue, T newvalue)
{
int index = IndexOf(oldvalue);
if (index != null)
{
arr[index] = newvalue;
}
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.