1,定义顺序栈接口 ISeqStack
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 栈
{
//数序栈
interface ISeqStack<T>
{
int Count { get; }//元素个数(属性)
int GetLenth();//栈的长度(方法)
bool IsEmpty();//栈是否为空
void Clear();//清空栈
void Push(T item);//入栈
T Pop();//出栈
T PeekTop();//取得栈顶元素
}
}
2,实现顺序栈接口 SeqStack
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 栈
{
class SeqStack<T> : ISeqStack<T>
{
private T[] data;//用于存储数据
private int top;//指向栈顶的索引
//初始化栈
public SeqStack(int size)
{
data = new T[size];
top = -1;
}
public SeqStack()
: this(10)
{
}
//属性
public int Count
{
get { return top+1; }
}
//方法
public int GetLenth()
{
return Count;
}
public bool IsEmpty()
{
return Count==0;
}
public void Clear()
{
top=-1;
}
public void Push(T item)
{
data[top+1]=item;
top++;
}
public T Pop()
{
T temp=data[top];
top--;
return temp;
}
public T PeekTop()
{
return data[top];
}
}
}
3,测试顺序栈
</pre><pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 栈
{
class Program
{
static void Main(string[] args)
{
ISeqStack<char> s = new SeqStack<char>(30);
s.Push('a');
s.Push('b');
s.Push('c');
s.Push('d');
Console.WriteLine("元素 a,b,c,d 入栈之后,栈的元素个数:"+s.Count+" 栈的长度:"+s.GetLenth());
Console.WriteLine("栈顶元素:" +s.PeekTop()); s.PeekTop();
Console.WriteLine("元素 " + s.Pop() + " 出栈之后,栈顶元素:" + s.PeekTop());
Console.WriteLine("元素 " + s.Pop() + " 出栈之后,栈顶元素:" + s.PeekTop());
s.Push('e');
s.Push('f');
s.Push('g');
Console.WriteLine("元素 e,f,g 入栈之后,栈的元素个数:"+s.Count+" 栈顶元素:" + s.PeekTop());
Console.WriteLine("元素 " + s.Pop()+", "+s.Pop() + " 出栈之后,栈顶元素:" + s.PeekTop());
s.Clear();
Console.WriteLine("清空栈之后,栈的元素个数:" + s.Count + " 栈的长度:" + s.GetLenth());
Console.ReadKey();
}
}
}
4,运行截图: