1. 数组栈
创建接口:
interface IStack<E>
{
int Count {
get; }
bool IsEmpty {
get; }
void Push(E e); //往栈中添加元素
E Pop(); //删除栈顶元素,并将栈顶元素返回
E Peek(); //查看栈顶元素
}
实现接口:
class Array1Stack<E> : IStack<E>
{
private Array1<E> arr;
//使用动态数组类快速封装出数组栈
public int Count {
get {
return arr.Count; } }
public bool IsEmpty {
get {
return arr.IsEmpty; } }
public Array1Stack(int capacity)
//用户知道传入多大容量栈时,让用户传入一个容量
{
arr = new Array1<E>(capacity);
}
public Array1Stack()
//用户不知道传入多大容量栈,使用动态数组无参构造函数
{
arr = new Array1<E>();
}
public void Push(E e)
//向动态数组的尾部添加元素,作为栈顶
{
arr.AddLast(e);
}
public E Pop()
{
return arr.RemoveLast();
}
public E Peek()
{
return arr.GetLast();
}
public override string ToString()
{
return "Stack: " + arr.ToString() + "top";
}
}
测试:
class Program
{
static void Main(string[] args)
{
Array1Stack<int> stack = new Array1Stack<int>();
for (int i = 0; i < 5; i++)
{
stack.Push(i);
Console.WriteLine(stack);
}
stack.Push(77);
Console.WriteLine(stack);
stack.Pop();
Console.WriteLine(stack);
Console.Read();
}
}
2. 链表栈
实现接口:
class LinkedList1Stack<E> : IStack<E>
{
private LinkedList1<E> list;
//使用链表类快速封装出链表栈
public LinkedList1Stack()
{
list = new LinkedList1<E>();
}
public int Count {
get {
return list.Count; } }
public bool IsEmpty {
get {
return list.IsEmpty; } }
public E Peek()
{
return list.GetFirst();
}
public E Pop()
{
return list.RemoveFirst();
}
public void Push(E e)
//向链表头部添加元素作为栈顶,时间复杂度为O(1)
{
list.AddFirst(e);
}
public override string ToString()
{
return "Stack: Top " + list.ToString();
}
}
测试:
class Program
{
static void Main(string[] args)
{
LinkedList1Stack<int> stack = new LinkedList1Stack<int>();
for (int i = 0; i < 5; i++)
{
stack.Push(i);
Console.WriteLine(stack);
}
stack.Push(77);
Console.WriteLine(stack);
stack.Pop();
Console.WriteLine(stack