//原理,利用两个栈,互相作用,来模仿堆的效果,先进先出。。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5
 6 namespace TwoStacksQueue
 7 {
 8     public class Program
 9     {
10         public void Main(string[] args)
11         {
12             TwoStaksQueues twoStaksQueues = new TwoStaksQueues();
13
14             twoStaksQueues.Add(1);
15             twoStaksQueues.Add(2);
16             twoStaksQueues.Add(3);
17
18             Console.WriteLine(twoStaksQueues.Peek());
19
20             twoStaksQueues.Poll();
21
22             Console.WriteLine(twoStaksQueues.Peek());
23
24             Console.ReadLine();
25         }
26         public class TwoStaksQueues
27         {
28             public Stack<int> stacksPush;
29             public Stack<int> stackPop;
30             public TwoStaksQueues()
31             {
32                 stackPop = new Stack<int>();
33                 stacksPush = new Stack<int>();
34             }
35             public void Add(int newNumber)
36             {
37                 stacksPush.Push(newNumber);
38             }
39
40             public int Poll()
41             {
42                 if (stacksPush.Count() == 0 && stackPop.Count() == 0)
43                 {
44
45                     throw new ArgumentOutOfRangeException("DataStacks is Empty");
46                 }
47                 if (stackPop.Count() == 0)
48                 {
49                     while (stacksPush.Count() != 0)
50                     {
51                         stackPop.Push(stacksPush.Pop());
52                     }
53                 }
54                 return stackPop.Pop();
55             }
56             public int Peek()
57             {
58                 if (stacksPush.Count() == 0 && stackPop.Count() == 0)
59                 {
60                     throw new IndexOutOfRangeException("DataStacks is Empty");
61                 }
62                 if (stackPop.Count() == 0)
63                 {
64                     while (stacksPush.Count() != 0)
65                     {
66                         stackPop.Push(stacksPush.Pop());
67                     }
68                 }
69                 return stackPop.Peek();
70
71             }
72         }
73     }
74 }

View Code

转载于:https://www.cnblogs.com/shidengyun/p/5037478.html

C#= 栈模仿堆的操作相关推荐

  1. 进程、线程、协程 关于进程、线程、协程,有非常详细和丰富的博客或者学习资源,我不在此做赘述,我大致在此介绍一下这几个东西。 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。

    进程.线程.协程 关于进程.线程.协程,有非常详细和丰富的博客或者学习资源,我不在此做赘述,我大致在此介绍一下这几个东西. 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程 ...

  2. 栈和堆的区别(转 知乎)

    ①管理方式:栈由编译器自动管理:堆由程序员控制,使用方便,但易产生内存泄露. ②生长方向:栈向低地址扩展(即"向下生长"),是连续的内存区域:堆向高地址扩展(即"向上生长 ...

  3. 定义入栈java_Java堆和栈你敢说了解吗?看完这个文章再有底气说吧

    Java中堆和栈的理解要求特别深刻,所以我们重点写了一个堆和栈的区别的文章,方便大家理解和应用. JAVA,内存模型中堆和栈的区别 在了解Java堆和栈的区别之前,我们先了解一下内存分配策略. JAV ...

  4. 栈、堆、方法区之间的关系

    先放一张图: 1.栈内存中放哪些东西? 基本类型的变量,例如int a=3中的a: 对象的引用变量,例如Thread t=new Thread();中的t. 当在代码块中定义一个变量时,Java就在栈 ...

  5. Java虚拟机中的栈和堆

    Java虚拟机中的栈和堆 简单的说: Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,J ...

  6. 内存空间分几部分:代码段、数据段,栈,堆 (收集整理)

    1.函数代码存放在代码段.声明的类如果从未使用,则在编译时,会优化掉,其成员函数不占代码段空间. 全局变量或静态变量,放在数据段, 局部变量放在栈中, 用new产生的对象放在堆中, 内存分为4段,栈区 ...

  7. 值类型和引用类型在栈和堆中的分配

      类型基础及背后的工作原理   数据在内存中的分配与传递    值类型和引用类型它们在内存分配与传递上的区别 内存分配 首先要了解一下内存中栈和堆的概念.     栈(Stack) ##栈是一种先进 ...

  8. JavaSE(二十一)——栈和队列、栈和堆

    文章目录 1. 栈和队列 1.1 定义 1.2 区别 1.3 常见笔试题 2. 栈和堆 2.1 栈内存 2.2 堆内存 2.3 区别 1. 栈和队列 1.1 定义 栈(Stack):是限定能在表的一端 ...

  9. 内存、数据结构之栈和堆的区别?

    网上有一篇很好的文章,我差不多直接搬运过来了. 来源:http://www.cleey.com/blog/single/id/776.html 原文如下: 可能很多同学在这个概念上有些模糊,其实堆栈分 ...

最新文章

  1. 【Qt中文手册】QSortFilterProxyModel
  2. iOS SVN 终端命令
  3. C3P0连接池的运用
  4. 20211126 为什么转动惯量矩阵是正定的?
  5. Scala中Unit 类型、Null 类型和 Nothing 类型
  6. tensorflow权重初始化
  7. Java-标识符和关键字
  8. linux下ceontab不起作用,linux下crontab 不能执行的原因
  9. 【英语学习】【Level 07】U04 Rest and Relaxation L6 Your home away from home
  10. 荣耀linux装win读不出u盘,华为/荣耀路由器USB接入硬盘/U盘后无法识别怎么解决?...
  11. jquery 把元素移动到另外一个元素里面
  12. K8S学习笔记之使用Fluent-bit将容器标准输入和输出的日志发送到Kafka
  13. Dr.Cleaner pro for mac(系统清理和优化软件)
  14. 使用emacs + cscope + ecb替代source insight
  15. linux过滤端口抓包_Linux下抓包命令tcpdump
  16. 用acdsee制作html,ACDSee软件图像处理操作实用技巧
  17. docker deamon源码学习
  18. android+日文输入法,玩转手机日语输入法(安卓/iphone)
  19. 硬盘结构及raid磁盘阵列
  20. 前后端分离,不在同一服务器上部署,报错“strict-origin-when-cross-origin”解决

热门文章

  1. Ubuntu中配置FTP服务
  2. 可视化管理_RFID技术实施智能仓储管理可视化
  3. kaggle数据集_ArXiv170万篇论文数据集上线Kaggle!
  4. 判断按键值_ALIENTEK 阿波罗 STM32F767 开发板资料连载第七章 按键输入实验
  5. python交互模式什么意思_Python中的交互模式是什么
  6. 【TensorFlow-windows】学习笔记一——基础理解
  7. JQ 取CHECKBOX选中项值
  8. 在原生js中的事件监听方法
  9. [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)
  10. Laravel 5.4 migrate时报错: Specified key was too long error