- 定义:栈是一种线性结构,可参考Stack提供给我们的方法
- 特性:先进后出,不可访问索引,只能逐渐推入推出
接口
interface IStackDS<T>
{
int Count { get; } //得到栈中数据个数,属性
int GetLength(); //同上,方法类型的
bool IsEmpty(); //检验是否为空
void Clear(); //清空
void Push(T item); //推入数据
T Pop(); //获得栈顶数据并删去
T Peek(); //仅获得栈顶数据
}
顺序栈
最基本的栈,没啥特别的地方。
- 关键点:
顺序栈栈顶元素为top-1,top为空元素
需要申请连续内存,为静态存储
变量
private T[] data; //内存申请
private int top; //默认top为-1
构造方法
public SeqStack(int size) //基本构造方法
{
data=new T[size];
top=-1;
}
public SeqStack():this(10) //无参时默认构造
{
}
链栈
- 概念:默认情况,栈顶元素top指向下一个元素next,当使用链栈入栈时,top元素指向新入栈元素,新入栈元素指向下个元素next
变量
private T[] data; //内存申请
private Node<T> top; //栈顶元素结点
private int count = 0; //栈中元素个数
入栈
public void Push(T item)
{
Node<T> newNode = new Node<T>(item);
newNode.Next = top;
top = newNode;
count++;
}
出栈
public T Pop()
{
T data = top.Data;
top = top.Next;
count--;
return data;
}
读取栈顶
public T Peek()
{
return top.Data;
}