演算法學習(一)揹包佇列和棧
阿新 • • 發佈:2018-11-28
揹包類bag
public class My_Bag<T>
{
public My_Bag()
{
array = null;
}
private T[] array;
/// <summary>
/// 新增一個元素
/// </summary>
/// <param name="item"></param>
public void Add(T item)
{
int size = Size();
T[] newarray = new T[size + 1];
for (int i = 0; i < size; i++)
{
newarray[i] = array[i];
}
newarray[size] = item;
this.array = newarray;
}
/// <summary>
/// 判斷是否為空
/// </summary>
/// <returns></returns>
public bool Isempty()
{
if (array == null)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 返回當前揹包大小
/// </summary>
/// <returns></returns>
public int Size()
{
if (array == null)
{
return 0;
}
else
{
return array.Length;
}
}
}
佇列(先進先出)
namespace ConsoleApp1
{
/// <summary>
/// 佇列類 先進先出
/// </summary>
/// <typeparam name="T"></typeparam>
public class My_Queue<T>
{
public My_Queue()
{
array = null;
}
private T[] array;
/// <summary>
/// 入隊
/// </summary>
/// <param name="item"></param>
public void Enqueue(T item)
{
int size = Size();
T[] Newarray = new T[size + 1];
for (int i = 0; i < size; i++)
{
Newarray[i] = array[i];
}
Newarray[size] = item;
this.array = Newarray;
}
/// <summary>
/// 出隊
/// </summary>
/// <param name="item"></param>
public T Ouqueue()
{
if (Size() == 0)
{
Console.WriteLine("未新增元素");
return default(T);
}
else
{
int size = Size();
T[] newarray = new T[size - 1];
for (int i = 1; i < size; i++)
{
newarray[i - 1] = array[i];
}
T num = array[0];
this.array = newarray;
return num;
}
}
/// <summary>
/// 刪除後進的一個元素
/// </summary>
public void Dequeue()
{
if (Size() == 0)
{
Console.WriteLine("未新增元素");
}
else
{
int size = Size();
T[] newarray = new T[size - 1];
for (int i = 0; i < size - 1; i++)
{
newarray[i] = array[i];
}
this.array = newarray;
}
}
/// <summary>
/// 判斷是否為空
/// </summary>
/// <returns></returns>
public bool Isempty()
{
if (array == null)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 獲取大小的方法
/// </summary>
/// <returns></returns>
public int Size()
{
if (array == null)
{
return 0;
}
else
{
return array.Length;
}
}
/// <summary>
/// 獲取佇列長度的屬性
/// </summary>
public int Length
{
get
{
return Size();
}
}
}
}
棧(先進後出)
namespace ConsoleApp1
{
/// <summary>
/// 佇列類 後進先出
/// </summary>
/// <typeparam name="T"></typeparam>
public class My_Stack<T>
{
public My_Stack()
{
array = null;
}
private T[] array;
/// <summary>
/// 入棧
/// </summary>
/// <param name="item"></param>
public void Push(T item)
{
int size = Size();
T[] newarray = new T[size + 1];
for (int i = 0; i < size; i++)
{
newarray[i] = array[i];
}
newarray[size] = item;
this.array = newarray;
}
/// <summary>
/// 出棧
/// </summary>
/// <param name="item"></param>
public T Back()
{
if (Size() == 0)
{
Console.WriteLine("未新增元素");
return default(T);
}
else
{
int size = Size();
T[] newarray = new T[size - 1];
for (int i = 0; i < size - 1; i++)
{
newarray[i] = array[i];
}
T num = array[size - 1];
this.array = newarray;
return num;
}
}
/// <summary>
/// 刪除後進的一個元素
/// </summary>
public void Pop()
{
if (Size() == 0)
{
Console.WriteLine("未新增元素");
}
else
{
int size = Size();
T[] newarray = new T[size - 1];
for (int i = 0; i < size - 1; i++)
{
newarray[i] = array[i];
}
this.array = newarray;
}
}
/// <summary>
/// 判斷是否為空
/// </summary>
/// <returns></returns>
public bool Isempty()
{
if (array == null)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 獲取大小的方法
/// </summary>
/// <returns></returns>
public int Size()
{
if (array == null)
{
return 0;
}
else
{
return array.Length;
}
}
/// <summary>
/// 獲取佇列長度的屬性
/// </summary>
public int Length
{
get
{
return Size();
}
}
}
}
心得:也不知道這樣能不能用,但是冗餘重複程式碼仍然有很多,下一步嘗試用面向物件的特性來寫。