一: 概念
栈,同样是一种特殊的线性表,是一种Last In First Out(LIFO)的形式,现实中有很多这样的例子,
比如:食堂中的一叠盘子,我们只能从顶端一个一个的取。
二:存储结构
”栈“不像”队列“,需要两个指针来维护,栈只需要一个指针就够了,这得益于栈是一种一端受限的线性表。
这里同样用”顺序结构“来存储这个”栈“,top指针指向栈顶,所有的操作只能在top处。
代码段:
/// <summary>
/// 栈顶指针
/// </summary>
public int top = -1;
public SeqStack(int lenth)
{
data = new T[lenth];
}
}
#endregion
</div>
三:常用操作
栈的操作有:①初始化栈,②入栈,③出栈,④获取栈顶。
1: 初始化栈
这个还是比较简单的,初始化栈时,设置默认top指针为-1,这个就不用图来展示了。
代码段:
seqStack.top = -1;
return seqStack;
}
#endregion
</div>
2:入栈
这个操作主要就是做两件事情:① 将元素从栈顶压入,② top指针自增。
代码段:
seqStack.data[++seqStack.top] = data;
}
#endregion
</div>
3:出栈
同样跟“入栈”类似,需要做两件事情,①干掉top处的元素,②top指针自减。
代码段
seqStack.data[seqStack.top] = default(T);
return seqStack.data[--seqStack.top];
}
#endregion
</div>
4:获取栈顶元素
这个很简单,跟“出栈”唯一不同的是不破坏栈顶元素,只是翻出来看看而已。
代码段
return seqStack.data[seqStack.top];
}
#endregion
</div>
总的运行代码如下
namespace SeqStack
{
class Program
{
static void Main(string[] args)
{
SeqStackClass stackManager = new SeqStackClass();
SeqStack<Student> seqStack = stackManager.SeqStackInit<Student>(10);