//原理,利用两个栈,互相作用,来模仿堆的效果,先进先出。。
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 }