自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现:
注意以下类,接口都是在一个命名空间下
栈的接口:包括了常用的方法
namespace 栈
{
interface IStackDS<T>
{
int Count { get; }
int GetLength();
bool IsEmpty();
void Clear();
void Push(T item);
T Pop();
T Peek();
}
}
顺序栈的实现,参照顺序表实现
namespace 栈
{
class SeqStack<T> : IStackDS<T>
{
private T[] data; //栈
private int top; //栈顶
//构造函数
public SeqStack(int size) {
data = new T[size];
top = -1;
}
public SeqStack() : this(10)
{
data = new T[10];
top = -1;
}
//栈的元素个数属性
public int Count
{
get
{
return top + 1;
}
}
//清空栈的方法
public void Clear()
{
top = -1;
}
//获取栈的长度的方法
public int GetLength()
{
return Count;
}
//查看栈顶元素是什么
public T Peek()
{
if (top == -1)
{
Console.WriteLine("当前栈没有元素");
return default(T);
}
return data[top];
}
//出栈(取出栈顶元素,并移除)
public T Pop()
{
T temp = data[top];
top--;
return temp;
}
//入栈
public void Push(T item)
{
data[top + 1] = item;
top++;
}
//栈中是否源元素
public bool IsEmpty()
{
return Count==0;
}
}
}
以上是顺序栈的实现
下面是链栈的实现,定义一个节点类
namespace 栈
{
/// <summary>
/// 链栈的节点
/// </summary>
/// <typeparam name="T"></typeparam>
class Node<T>
{
private T data; //数据
private Node<T> next; //指向下一个的引用
//四个构造函数,不是都有用,,以及上面两个变量的属性,
public Node()
{
data = default(T);
next = null;
}
public Node(T data)
{
this.data = data;
next = null;
}
public Node(T data , Node<T> index)
{
this.data = data;
this.next = index;
}
public Node(Node<T> index)
{
data = default(T);
next = index;
}
public T Data
{
get { return data; }
set { data = value; }
}
public Node<T> Next
{
get { return next; }
set { next = value; }
}
}
}










