wtuqi
4/19/2020 - 8:58 AM

堆栈和队列

	//取栈操作,并计算
Func<Stack<string>, double> GetVal2 = (m) =>
  {
      if (m.Count == 0) { return 0; }
      System.Diagnostics.Debug.Print(m.ToString());
      string A, B, C; double D = 0;
      A = m.Pop();//出栈并计算
      B = m.Pop();
      C = m.Pop();
      switch (A)
      {
          case "×":
              D = Convert.ToDouble(B) * Convert.ToDouble(C);
              break;
          case "÷":
              D = Convert.ToDouble(B) / Convert.ToDouble(C);
              break;
          case "+":
              D = Convert.ToDouble(B) + Convert.ToDouble(C);
              break;
          case "-":
              D = Convert.ToDouble(B) - Convert.ToDouble(C);
              break;
      }
      return Math.Round(D, 2);
  };
	
	//传入计算式(字符串,返回值)
Func<string,string> GetVal1 = (m) =>
 {
      StringBuilder sb = new StringBuilder();
      Stack<string> val = new Stack<string>();
      ArrayList arr=new ArrayList(m.Split(' ').ToArray());
      for (int i = 0; i < arr.Count - 1; i++)
      {
          //if (v != "0")
          //{
              if (arr[i].ToString() == "#")
              {
                  arr.RemoveAt(i);
                  arr.Insert(i, Val2);
              }
          //}
          Action d =()=>{
              val.Push(arr[i + 1].ToString());
              arr.RemoveAt(i + 1);//删*右13
              val.Push(arr[i - 1].ToString());
              arr.RemoveAt(i - 1);//删*左14
              val.Push(arr[i - 1].ToString());
              arr.RemoveAt(i - 1);//删*但是前面减了13往左移-1
              arr.Insert(i - 1, GetVal2(val).ToString());
          };
          if (arr.Contains("×") == true || arr.Contains("÷") == true)
          {
              if (arr[i].ToString() == "×" || arr[i].ToString() == "÷")
              {
                  d.Invoke();//调用位移入栈操作
              }
          }
          else
          {
              if (arr[i].ToString() == "-" || arr[i].ToString() == "+")
              {
                  d.Invoke();//调用位移入栈操作
              }
          }
      }

      if (arr.Count < 1) { return sb.ToString(); }
      foreach (string s in arr)
      {
          sb.Append(s + " ");
      }
      return sb.ToString();
  };
   //调用
   Val1 = GetVal1.Invoke(GetVal1.Invoke(GetVal1.Invoke("23 + 14 * 2 ÷ 2").ToString()).ToString()).ToString();
	//控制台程序
	Stack<string> value = new Stack<string>();
	value.Push("1");//压入
	value.Push("2");
	value.Push("3");
	value.Push("4");
	Console.ForegroundColor = ConsoleColor.Green; 
	Console.WriteLine(value.Peek());//弹出
	Console.WriteLine(value.Contains("4"));//判断是否存在
	Console.WriteLine(value.Pop());//弹出并删除
	Console.WriteLine(value.Contains("4"));
	Console.WriteLine(value.Pop());
	Console.WriteLine(value.Pop());
	Console.ReadKey();
	
	
	//栈转数组
  string[] arr = { "abc1 ", "abc2 ", "abc3 ", };
  //栈转泛型数组
  ArrayList arr=new ArrayList(m.Split(' ').ToArray());