当前位置: 首页 > news >正文

C#用链表和数组分别实现堆栈

1.链表
实现栈的四个基本功能 入栈 出栈 长度 栈顶值

public class 基础 : MonoBehaviour
{public class MyStack{//定义每一个元素的数据结构 //下一个元素 和 该元素的值public class StackData{public StackData next;public object data;public StackData(StackData next, object data){this.next = next;this.data = data;}}//记录数量int size;//代表栈顶元素  StackData top;public void Push(object data){//因为栈是先进后出 后进来的元素就成为了栈顶//所以每压入一个元素 就让后进来元素的next指向前一个元素//出栈时 丢失最后节点的引用即可top = new StackData(top, data);size++;}public object Pop(){//弹出栈顶元素 同时下一个元素就是新栈顶object result = top.data;top = top.next;size--;return result;}public int Count{get{return size;}}public object Peek(){if (top == null) return null;return top.data;}}private void Start(){MyStack ms = new MyStack();ms.Push(1);ms.Push(2);ms.Push(3);ms.Push(4);ms.Push(5);Debug.Log(ms.Pop());Debug.Log(ms.Pop());Debug.Log(ms.Count);Debug.Log(ms.Peek());}
}

2.数组
(1)数组就是会更麻烦一点 不过可以加深对数组和栈的理解
(2)Pop和Enlarge 核心就是数组满了以后 创建一个新数组 将旧书组中的元素放入新数组 然后再将新数组赋值给旧数组即可
(3)栈是先进后出 所以只需要着重处理数组的末尾索引即可

public class 基础 : MonoBehaviour
{public class MyStack<T>{//通过数组实现堆栈public T[] list;public int maxSize = 2;public int nowSize = 0;public MyStack(){list = new T[maxSize];}public int Count    {get{return nowSize;}}public void Push(T data){if(maxSize >= nowSize + 1){list[nowSize++] = data;}else{Enlarge();list[nowSize++] = data;}}public T Pop(){if(nowSize > 0){T[] list3 = new T[maxSize];T temp = list[--nowSize];for (int i = 0; i < list.Length - 1; i++){list3[i] = list[i];}list = list3;return temp;}else{return default(T);}}public void Enlarge(){T[] list2 = new T[maxSize * 2];for(int i = 0; i < list.Length; i++){list2[i] = list[i];}list = list2;maxSize *= 2;}}private void Start(){MyStack<int> ms = new MyStack<int>();ms.Push(1);ms.Push(2);ms.Push(3);ms.Push(4);ms.Push(5);Debug.Log(ms.Pop());Debug.Log(ms.Count);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AE-图层
  • 数据泄露时代的安全之道:访问认证的重要性
  • [leetcode hot 150]第二十三题,合并K个升序链表
  • SMU Summer 2024 Contest Round 2
  • Redis 客户端命令大全
  • 力扣第一题
  • c++入门基础篇(上)
  • Day65 代码随想录打卡|回溯算法篇---组合总和II
  • 53-3 内网代理5 - frp搭建二级代理
  • Pytest中的钩子函数
  • 初识c++(引用,inline,nullprt)
  • 基于MCU平台的HMI开发的性能优化与实战(下)
  • SpringBoot 实现视频分段播放(通过进度条来加载视频)
  • [面试爱问] https 的s是什么意思,有什么作用?
  • VUE之旅—day3
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Angularjs之国际化
  • ES10 特性的完整指南
  • in typeof instanceof ===这些运算符有什么作用
  • java多线程
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • php中curl和soap方式请求服务超时问题
  • Swift 中的尾递归和蹦床
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 大主子表关联的性能优化方法
  • 机器学习中为什么要做归一化normalization
  • 经典排序算法及其 Java 实现
  • 异常机制详解
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #Java第九次作业--输入输出流和文件操作
  • #微信小程序(布局、渲染层基础知识)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (第一天)包装对象、作用域、创建对象
  • (二)Linux——Linux常用指令
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)JPA - JQPL 实现增删改查
  • (四)js前端开发中设计模式之工厂方法模式
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)大型网站的系统架构
  • (自用)交互协议设计——protobuf序列化
  • **CI中自动类加载的用法总结
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .gitignore文件忽略的内容不生效问题解决
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • /var/lib/dpkg/lock 锁定问题
  • @ConfigurationProperties注解对数据的自动封装
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @RestController注解的使用
  • @vue-office/excel 解决移动端预览excel文件触发软键盘