C#数据结构:顺序栈

  • 1、自定义顺序栈结构:
/// <summary>
/// 顺序栈
/// </summary>
/// <typeparam name="T"></typeparam>
public class SeqStack<T>
{
private T[] data;
private int top; ///*用来存放栈顶元素的下标,top 为-1 表示空栈*/ public SeqStack(int size)
{
data = new T[size];
top = -1;
} public SeqStack() : this(10)//默认构造函数,最大容量10
{ } //栈最大容量
public int MaxSize
{
get
{
return data.Length;
}
} //判空
public bool IsEmpty()
{
return top == -1;
} //判满
public bool IsFull()
{
return top == data.Length - 1;
} //进栈
public void Push(T item)
{
if(IsFull())
{
Debug.LogError("栈满!");
return;
}
data[++top] = item;
} //出栈
public T Pop()
{
if(IsEmpty())
{
Debug.LogError("栈空,无法出栈!");
return default(T);
}
return data[top--];
} //访问栈顶
public T Peek()
{
if (IsEmpty())
{
Debug.LogError("栈空,无法访问栈顶!");
return default(T);
}
return data[top];
} //栈中元素个数
public int Count
{
get
{
return top + 1;
}
} //清空栈
public void Clear()
{
top = -1;
}
}

顺序栈:测试用例
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class _005_SeqStack : MonoBehaviour
{
SeqStack<string> seqStack; void Start()
{
//初始化栈
seqStack = new SeqStack<string>(4);//size=4 //栈最大容量
Debug.Log("栈最大容量:" + seqStack.MaxSize); //判空
Debug.Log("栈是否空:" + seqStack.IsEmpty()); //判满
Debug.Log("栈是否满:" + seqStack.IsFull()); //进栈
Debug.Log("进栈:" + "1,2,3,4");
seqStack.Push("1");
seqStack.Push("2");
seqStack.Push("3");
seqStack.Push("4"); //栈中元素个数
Debug.Log("栈中元素个数: " + seqStack.Count); //判满
Debug.Log("栈是否满:" + seqStack.IsFull()); //出栈
Debug.Log("出栈-----出栈值为:" + seqStack.Pop()); //栈中元素个数
Debug.Log("出栈后,栈中元素个数: " + seqStack.Count); //访问栈顶元素
Debug.Log("栈顶元素值: " + seqStack.Peek()); //栈中元素个数
Debug.Log("访问栈顶后,栈中元素个数: " + seqStack.Count); //清空栈
seqStack.Clear();
Debug.Log("清空栈!"); //栈中元素个数
Debug.Log("清空栈后,栈中元素个数: " + seqStack.Count);
} }

输出结果:

注意:

1、栈也是表结构,只是限制了表的操作位置,栈的操作只能在栈顶

2、栈是先进后出

3.访问栈顶的Peek()操作,不会改变栈顶指针。

最新文章

  1. apache安全配置---禁止访问特定文件,防止日志、压缩包被下载
  2. 20160512关于mac安装caffe的记录
  3. mssql 获取表结构信息
  4. Network 20Q--Q2 How does Google sell ad spaces?
  5. vertical-align:middle的居中细节调整
  6. python笔记:#013#高级变量类型
  7. 调用约定__cdecl __fastcall与__stdcall
  8. mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)
  9. 2.6 利用FTP上传所有文件
  10. 内核里面writel(readl)是如何实现的
  11. Java 注释类之常用元注解
  12. oracle中类似indexof用法_instr函数
  13. python 截取 取出一部分的字符串
  14. 在IIS6中FLV不能播放
  15. matlab中hold on 和hold off功能的区别
  16. Java中关键字static的使用与作用
  17. MathType试用期到了如何继续用
  18. GPU驱动兼容性问题
  19. POJ 3254 状态压缩 DP
  20. Ubuntu 16.04下使用UNetbootin制作的ISO镜像为U盘启动出现:Missing Operating System (mbr.bin)

热门文章

  1. Codeforces Round #261 (Div. 2) A
  2. JavaScript-获取当前元素的相关元素或节点--方法总结
  3. 1-8继承extends
  4. 3. UITest笔记
  5. chrome inspect出现白屏的解决方案
  6. gp服务输出的结果文件输出到绝对路径
  7. SqlSessionFactory
  8. like SQL注入与防止 (bin2hex unhex)
  9. ubuntu破解密码方法
  10. UVA 10288 Coupons 彩票 (数学期望)