栈
来源:互联网 发布:飞利浦音响知乎 编辑:程序博客网 时间:2024/06/05 10:06
1,什么是栈
首先栈是一种特殊的线性表。那它的特殊性表现在哪里呢?栈是限定在表的一端进行插入和删除运算的线性表,因此,栈也称为后进先出(LIFO)的线性表。
它有很多应用场景,比如食堂中的一叠盘子,我们只能从顶端一个一个地取。
1,初始化
实现思路:用指定大小的length实例化一个SeqStack<T>,然后使top指针指向-1。
2,进栈
实现思路:将top指针加1,然后将新结点插入到top指针指向的位置。
3,出栈
实现思路:消灭top指向的结点,并使top指针减1。
4,获取栈顶元素
实现思路:与出栈相似,只是不改变栈的状态而已。
5,判断是否栈空
实现思路:如果top指针是否等于-1,如果是则返为空栈。
6,判断是否栈满
实现思路:检查top指针的值是否等于数组的长度,如果是则为栈满。
首先栈是一种特殊的线性表。那它的特殊性表现在哪里呢?栈是限定在表的一端进行插入和删除运算的线性表,因此,栈也称为后进先出(LIFO)的线性表。
它有很多应用场景,比如食堂中的一叠盘子,我们只能从顶端一个一个地取。
2,栈的存储结构
/// <summary> /// 封装顺序栈 /// </summary> /// <typeparam name="T"></typeparam> public class SeqStack<T> { //使用数组来存放结点 public T[] data; //栈顶指针 public int top = -1; public SeqStack(int length) { data=new T[length]; } }3,栈的常见操作及实现代码
1,初始化
实现思路:用指定大小的length实例化一个SeqStack<T>,然后使top指针指向-1。
2,进栈
实现思路:将top指针加1,然后将新结点插入到top指针指向的位置。
3,出栈
实现思路:消灭top指向的结点,并使top指针减1。
4,获取栈顶元素
实现思路:与出栈相似,只是不改变栈的状态而已。
5,判断是否栈空
实现思路:如果top指针是否等于-1,如果是则返为空栈。
6,判断是否栈满
实现思路:检查top指针的值是否等于数组的长度,如果是则为栈满。
namespace DS.BLL{ public class SeqStackBLL { /// <summary> /// 初始化 /// </summary> /// <param name="length"></param> /// <returns></returns> public static SeqStack<T> Init<T>(int length) { SeqStack<T> seqStack = new SeqStack<T>(length); seqStack.top = -1; return seqStack; } /// <summary> /// 进栈 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="seqStack"></param> /// <param name="data"></param> public static void Push<T>(SeqStack<T> seqStack, T data) { //检查是否栈满 if (IsFull(seqStack)) return; seqStack.data[++seqStack.top] = data; } /// <summary> /// 出栈 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="seqStack"></param> public static T Pop<T>(SeqStack<T> seqStack) { //检查是否栈空 if (IsEmpty(seqStack)) return default(T); seqStack.data[seqStack.top]=default(T); return seqStack.data[--seqStack.top]; } /// <summary> /// 获取栈顶元素 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="seqStack"></param> /// <returns></returns> public static T GetTop<T>(SeqStack<T> seqStack) { //检查是否栈空 if (IsEmpty(seqStack)) return default(T); return seqStack.data[seqStack.top]; } /// <summary> /// 获取栈中元素个数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="seqStack"></param> /// <returns></returns> public static int GetLength<T>(SeqStack<T> seqStack) { return seqStack.top + 1; } /// <summary> /// 判断是否栈满 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="seqStack"></param> /// <returns></returns> private static bool IsFull<T>(SeqStack<T> seqStack) { return seqStack.top == seqStack.data.Length; } /// <summary> /// 判断是否栈空 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="seqStack"></param> /// <returns></returns> private static bool IsEmpty<T>(SeqStack<T> seqStack) { return seqStack.top == -1; } } /// <summary> /// 封装顺序栈 /// </summary> /// <typeparam name="T"></typeparam> public class SeqStack<T> { //使用数组来存放结点 public T[] data; //栈顶指针 public int top = -1; public SeqStack(int length) { data=new T[length]; } }}
0 0
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- MYSQL group by 使用理解
- 学习笔记:View的事件体系2:View的滑动
- C# 画条形码
- SQL Server 2008中的CTE递归查询得到一棵树(按照每颗树的架构排列)
- Lintcode 三数之和
- 栈
- iOS自动化打包之在Xcode8.2.1之上没有PackageApplication指令的解决方法
- http://blog.csdn.net/peace1213/article/details/50849940
- 关于conn /as sysdba 无需密码直接可以连接的疑问
- AndroidManifest文件中属性<application android:allowBackup="false">
- ubuntu14.04上网问题
- https://www3.oculus.com/en-us/setup/
- 用纯css实现下拉菜单的几种方式
- 一、数学知识复习