8.顺序栈类
namespace DSList
{
public partial class SeqStack<T> : IStack<T> where T:IComparable<T>
{
/// <summary>
/// fields
/// </summary>
private int maxsize;
private T[] data;
private int top;
/// <summary>
/// properties
/// </summary>
public int Maxsize
{
get
{
return maxsize;
}
set
{
maxsize = value;
}
}
public T this[int index]
{
get
{
return data[index];
}
set
{
data[index] = value;
}
}
public int Top
{
get
{
return top;
}
}
/// <summary>
/// constructors
/// </summary>
public SeqStack()
: this(100)
{ }
public SeqStack(int size)
{
data = new T[size];
maxsize = size;
top = -1;
}
/// <summary>
/// base methods
/// </summary>
public int GetLength()
{
return top+1;
}
public bool IsEmpty()
{
if (top == -1)
{
return true;
}
else
{
return false;
}
}
public bool IsFull()
{
if (top == maxsize-1)
{
return true;
}
else
{
return false;
}
}
public void Clear()
{
top = -1;
}
public void Push(T item)
{
if (IsFull())
{
Console.WriteLine("SeqStack is full!");
return;
}
data[++top] = item;
}
public T Pop()
{
if (IsEmpty())
{
Console.WriteLine("SeqStack is empty!");
return default(T) ;
}
T tmp = data[top];
--top;
return tmp;
}
public T GetTop()
{
if (IsEmpty())
{
Console.WriteLine("SeqStack is empty!");
return default(T);
}
return data[top];
}
}
public partial class SeqStack<T> : IStack<T> where T : IComparable<T>
{
/// <summary>
/// others methods
/// </summary>
public bool Contains (T item)
{
for (int i = 0; i <= top; ++i)
{
if (data[i].Equals(item))
{
return true;
}
}
return false;
}
public void Reverse()
{
T temp = default(T);
int len = GetLength() - 1;
for (int i = 0; i <= len/2; ++i)
{
temp = data[top - i];
data[top - i] = data[i];
data[i] = temp;
}
}
public void Merge(SeqStack<T> S1, SeqStack<T> S2)
{
this.Maxsize = S1.Maxsize + S2.Maxsize;
int i = 0;
int j = 0;
while (i < S1.GetLength() && j < S2.GetLength())
{
if (S1[i].CompareTo(S2[j]) < 0)
{
this.Push(S1[i++]);
}
else
{
this.Push(S2[j++]);
}
}
while (i < S1.GetLength())
{
this.Push(S1[i++]);
}
while (j < S2.GetLength())
{
this.Push(S2[j++]);
}
}
public void Purge(SeqStack<T> S)
{
this.Maxsize = S.Maxsize;
this.Push(S[0]);
for (int i = 1; i < S.GetLength(); ++i)
{
int j = 0;
for (j = 0; j < this.GetLength(); ++j)
{
if (S[i].Equals(data[j]))
{
break;
}
}
if (j > this.GetLength() - 1)
{
this.Push(S[i]);
}
}
}
public void Sort()
{
T tmp = default(T);
for (int i = 0; i < GetLength(); i++)
{
for (int j = i+1; j < GetLength(); j++)
{
if (data[i].CompareTo(data[j]) > 0)
{
tmp = data[j];
data[j] = data[i];
data[i] = tmp;
}
}
}
}
public void Output()
{
foreach(T i in data)
{
Console.Write(i+" ");
}
Console.WriteLine();
}
}
}