public string ReversePostfix() { string postfix = null; ConnectedListStack mstack = new ConnectedListStack(); foreach (char cur in data) { if (Char.IsDigit(cur)) { postfix += cur; } if (IsOperator(cur)) { if (mstack.count == 0 || mstack.GetTop() == "(") { mstack.Push(Convert.ToString(cur)); } else if (Priority(Char.Parse(mstack.GetTop())) < Priority(cur)) { mstack.Push(Convert.ToString(cur)); } else if (Priority(Char.Parse(mstack.GetTop())) >= Priority(cur)) { while (mstack.count != 0 && mstack.GetTop() != "(" && !(Priority(Char.Parse(mstack.GetTop())) < Priority(cur))) { postfix += mstack.GetTop(); mstack.Pop(); } mstack.Push(Convert.ToString(cur)); } } if (Convert.ToString(cur) == "(") { mstack.Push(Convert.ToString(cur)); } if (Convert.ToString(cur) == ")") { while (mstack.count != 0 && mstack.GetTop() != "(") { postfix += mstack.GetTop(); mstack.Pop(); } if (mstack.GetTop() == "(") { mstack.Pop(); } } } while (mstack.count != 0) { postfix += mstack.GetTop(); mstack.Pop(); } data = postfix; return(postfix); }
public void Calc() { foreach (char x in data) { if (op.Contains(x)) { if (stack.count < 2) { Console.WriteLine("Ошибка"); f = 0; break; } int op2 = Int32.Parse(stack.GetTop()); stack.Pop(); int op1 = Int32.Parse(stack.GetTop()); stack.Pop(); if (x == Char.Parse("+")) { res = op1 + op2; } else if (x == Char.Parse("-")) { res = op1 - op2; } else if (x == Char.Parse("*")) { res = op1 * op2; } else { res = op1 / op2; } stack.Push(Convert.ToString(res)); } else { stack.Push(Convert.ToString(x)); } } if (stack.count == 1) { Console.WriteLine("Ответ: " + stack.GetTop()); } else if (f == 1) { Console.WriteLine("Ошибка"); } }
static void Main(string[] args) { Console.WriteLine("Создание ограниченного стека в виде массива"); ArrayStack arrayStack = new ArrayStack(5); arrayStack.Push(2); arrayStack.Push(5); arrayStack.GetTop(); arrayStack.Pop(); arrayStack.GetTop(); arrayStack.DestroyStack(); arrayStack.GetTop(); Console.WriteLine("_____________________________________"); Console.WriteLine("Создание стека в виде связанного списка"); ConnectedListStack conStack = new ConnectedListStack(); conStack.GetTop(); conStack.Push("2"); Console.WriteLine("Stack top = " + conStack.GetTop()); conStack.Push("3"); Console.WriteLine("Stack top = " + conStack.GetTop()); conStack.Push("5"); Console.WriteLine("Stack top = " + conStack.GetTop()); conStack.Pop(); Console.WriteLine("Stack top = " + conStack.GetTop()); conStack.Pop(); Console.WriteLine("Stack top = " + conStack.GetTop()); Console.WriteLine("_____________________________________"); Console.WriteLine("Создание ограниченной очереди"); Queue queue = new Queue(5); queue.EnQueue(3); queue.EnQueue(2); queue.EnQueue(1); queue.GetFront(); Console.WriteLine("Удаление первого элемента в очереди"); queue.DeQueue(); queue.GetFront(); Console.WriteLine("_____________________________________"); Console.WriteLine("Создание односвязного списка"); LinkedList list = new LinkedList(); list.Insert(0, 1); list.Insert(1, 2); list.Insert(2, 3); list.PrintList(); Console.WriteLine("Удаление элемента под индексом 2"); list.Remove(2); list.PrintList(); Console.WriteLine("_____________________________________"); Console.WriteLine("Создание двусвязного списка"); Node n1 = new Node(1); Node n2 = new Node(2); Node n3 = new Node(3); Node n4 = new Node(4); DoubleLinkedList ddl = new DoubleLinkedList(); ddl.InsertStart(n1); ddl.InsertEnd(n4); ddl.InsertAfter(n1, n2); ddl.InsertBefore(n4, n3); ddl.PrintDLL(); ddl.Remove(n1); Console.WriteLine("Удаление элемента под индексом 0"); ddl.PrintDLL(); Console.WriteLine("_____________________________________"); Console.WriteLine("Создание кольцевого односвязного списка"); CycledLinkedList cll = new CycledLinkedList(); cll.Insert(1); cll.Insert(2); cll.Insert(3); cll.PrintCLL(2); Console.WriteLine("_____________________________________"); Console.WriteLine("Вычисление постфиксных выражений."); PostfixExpression exp = new PostfixExpression(" 2*(3+2)*((5*2-8)+(6-2*2))"); Console.WriteLine("Инфиксное выражение: " + exp.GetStartExp()); Console.WriteLine("Постиксное выражение: " + exp.ReversePostfix()); exp.Calc(); Console.ReadLine(); }