예제 #1
0
        public void ResizingArrayStack_Positive()
        {
            var stack = new ResizingArrayStack <int>();

            Assert.IsTrue(stack.IsEmpty());
            stack.Push(1);
            stack.Push(3);
            stack.Push(5);
            stack.Push(7);
            stack.Push(9);
            Assert.AreEqual(5, stack.Size());
            Assert.AreEqual(9, stack.Peek());

            Assert.AreEqual(9, stack.Pop());
            Assert.AreEqual(7, stack.Pop());
            Assert.AreEqual(3, stack.Size());
            Assert.AreEqual(5, stack.Peek());

            stack.Push(66);
            var list = new List <int> {
                66, 5, 3, 1
            };
            int index = 0;

            foreach (var i in stack)
            {
                Assert.AreEqual(list[index++], i);
            }
        }
        public void ResizingArrayStackTest()
        {
            var stack = new ResizingArrayStack <int>();

            stack.Push(1);
            stack.Push(2);

            Assert.IsTrue(stack.ItemCount == 2);
            Assert.IsTrue(stack.IsEmpty() == false);
            Assert.IsTrue(stack.Peek() == 2);
            Assert.IsTrue(stack.Pop() == 2);
            Assert.IsTrue(stack.ItemCount == 1);
            stack.Pop();
            Assert.IsTrue(stack.IsEmpty());

            for (int i = 0; i < 1000; i++)
            {
                stack.Push(i);
            }

            Assert.IsTrue(stack.ItemCount == 1000);

            for (int i = 0; i < 1000; i++)
            {
                stack.Pop();
            }

            Assert.IsTrue(stack.ItemCount == 0);
        }
        public void ConstructorTest()
        {
            IStack <int> stack = new ResizingArrayStack <int>();

            Assert.IsTrue(stack.IsEmpty());
            Assert.AreEqual(0, stack.Size());
            Assert.IsTrue(string.IsNullOrWhiteSpace(stack.ToString()));
        }
예제 #4
0
        public void ResizingArrayStackTest1()
        {
            ResizingArrayStack <int> stack = new ResizingArrayStack <int>();

            Assert.AreEqual(0, stack.Count, "New stack has zero size");
            Assert.AreEqual(true, stack.IsEmpty, "New stack is empty");
            Assert.AreEqual("", IteratorToString(stack));
        }
예제 #5
0
        private string IteratorToString(ResizingArrayStack <int> input)
        {
            StringBuilder sb = new StringBuilder();

            foreach (int i in input)
            {
                sb.Append(i + " ");
            }
            return(sb.ToString());
        }
        public void ToStringTest()
        {
            IStack <int> stack = new ResizingArrayStack <int>();

            for (int i = 0; i < 10; i++)
            {
                stack.Push(i);
            }
            Assert.AreEqual("9 8 7 6 5 4 3 2 1 0", stack.ToString());
        }
예제 #7
0
        public void DijkstraEval()
        {
            string expression = "( ( 5 + 10 ) - ( ( 4 / 2 ) * 4 ) )";
            var    ops        = new ResizingArrayStack <string>(1);
            var    vals       = new ResizingArrayStack <double>(1);

            var result = DijkstraExpressionEvaluation.Evaluate(ops, vals, expression);

            Assert.AreEqual(7, result);
        }
예제 #8
0
        private void transferContents(ResizingArrayStack <T> srcStack, ResizingArrayStack <T> destStack)
        {
            int size = srcStack.Size();

            for (int i = 0; i < size; i++)
            {
                destStack.Push(srcStack.Pop());
            }

            shouldTransfer = false;
        }
예제 #9
0
 public void TestResizingStack() {
     var stack = new ResizingArrayStack<string>();
     stack.Push("Hello");
     stack.Push("World");
     stack.Push("how");
     stack.Push("are");
     stack.Push("you");
     foreach (var item in stack) {
         Console.WriteLine(item);
     }
 }
        public void ManyPushTest()
        {
            IStack <int> stack = new ResizingArrayStack <int>();

            for (int i = 0; i < 10; i++)
            {
                stack.Push(i);
                Assert.IsFalse(stack.IsEmpty());
                Assert.AreEqual(i + 1, stack.Size());
                Assert.AreEqual(i, stack.Peek());
            }
        }
        public void PushAndPopTest_ReferenceType()
        {
            IStack <String> stack = new ResizingArrayStack <String>();

            stack.Push("1");
            Assert.IsFalse(stack.IsEmpty());
            Assert.AreEqual("1", stack.Peek());
            Assert.AreEqual(1, stack.Size());
            String value = stack.Pop();

            Assert.IsTrue(stack.IsEmpty());
            Assert.AreEqual(0, stack.Size());
            Assert.AreEqual("1", value);
        }
        public void PushAndPopTest_ValueType()
        {
            IStack <int> stack = new ResizingArrayStack <int>();

            stack.Push(1);
            Assert.IsFalse(stack.IsEmpty());
            Assert.AreEqual(1, stack.Peek());
            Assert.AreEqual(1, stack.Size());
            int value = stack.Pop();

            Assert.IsTrue(stack.IsEmpty());
            Assert.AreEqual(0, stack.Size());
            Assert.AreEqual(1, value);
        }
예제 #13
0
        private static void StartTest <T>(T[] values)
        {
            var fixedCapacitystack = new FixedCapacityStack <T>(values.Length);
            var resizingArraystack = new ResizingArrayStack <T>();
            var chainStack         = new ChainStack <T>();

            // 多次使用测试
            for (int i = 0; i < 100; i++)
            {
                AssertStack(values, fixedCapacitystack);
                AssertStack(values, resizingArraystack);
                AssertStack(values, chainStack);
            }
        }
예제 #14
0
        public void TestResizingStack()
        {
            var stack = new ResizingArrayStack <string>();

            stack.Push("Hello");
            stack.Push("World");
            stack.Push("how");
            stack.Push("are");
            stack.Push("you");
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
        }
예제 #15
0
        public void EnumeratingOnFixedStack()
        {
            var stack = new ResizingArrayStack <int>(1);

            stack.Push(10);
            stack.Push(15);
            stack.Push(20);
            stack.Push(30);
            stack.Push(40);

            var arr = stack.ToArray(); // because this uses the Enumerator

            Assert.AreEqual(new int[] { 40, 30, 20, 15, 10 }, arr);
        }
        public void ManyPopTest()
        {
            IStack <int> stack = new ResizingArrayStack <int>();

            for (int i = 0; i < 10; i++)
            {
                stack.Push(i);
            }
            for (int i = 0; i < 10; i++)
            {
                int value = stack.Pop();
                Assert.AreEqual(10 - i - 1, stack.Size());
                Assert.AreEqual(10 - i - 1, value);
            }
        }
예제 #17
0
파일: TEST2.cs 프로젝트: kismy/Algorithms
    void ResizingArrayStackTest()
    {
        //string[] str = new string[14] { "To", "be", "or", "not", "to", "-", "be", "-", "-", "that", "-", "-", "-", "is" };
        int[] array = new int[13] {
            00, -1, 22, 33, 44, -1, 66, 77, 88, 99, -1, 110, 120
        };
        //ResizingArrayStack<string> stringStackTerator = new ResizingArrayStack<string>();
        ResizingArrayStack <int> intStackTerator = new ResizingArrayStack <int>();

        //for (int i = 0; i < str.Length; i++)
        //{
        //    string item = str[i];
        //    if (!item.Equals("-"))
        //    {
        //        stringStackTerator.Push(item);
        //    }
        //    else if (!stringStackTerator.IsEmpty())
        //    {
        //        stringStackTerator.POP();
        //    }
        //}

        //for (int i = 0; i < array.Length; i++)
        //{
        //    int item = array[i];
        //    if (item != -1)
        //    {
        //        intStackTerator.push(item);

        //    }else if (!intStackTerator.IsEmpty()) intStackTerator.POP();
        //}

        //foreach (string item in stringStackTerator)
        //{
        //    print(item);
        //}

        //for (int i = 0; i < intStackTerator.size(); i++)
        //{
        //    print("For[i] item:" + intStackTerator.values[i]);
        //}
        foreach (int item in intStackTerator)
        {
            print("Foreach item:" + item);
        }
    }
예제 #18
0
 public IEnumerable <int> PathTo(int v)
 {
     if (HasPathTo(v))
     {
         var path = new ResizingArrayStack <int>();
         for (int i = v; i != _s; i = _pathTo[i])
         {
             path.Push(i);
         }
         path.Push(_s);
         while (!path.IsEmpty())
         {
             yield return(path.Pop());
         }
     }
     ;
 }
예제 #19
0
        private bool MatchParens(string input)
        {
            var parens = new ResizingArrayStack <char>(1);

            foreach (var i in input)
            {
                switch (i)
                {
                case '[':
                case '(':
                case '{':
                    parens.Push(i);
                    break;

                case ']':
                    if (parens.IsEmpty() || parens.Pop() != '[')
                    {
                        return(false);
                    }
                    break;

                case ')':
                    if (parens.IsEmpty() || parens.Pop() != '(')
                    {
                        return(false);
                    }
                    break;

                case '}':
                    if (parens.IsEmpty() || parens.Pop() != '{')
                    {
                        return(false);
                    }
                    break;

                default:
                    break;
                }
            }
            return(true);
        }
예제 #20
0
        public void ResizingArrayStackTest2()
        {
            int[] input = { 3, 2, 4, 6, 9 };
            ResizingArrayStack <int> stack = new ResizingArrayStack <int>();

            stack.Push(3);
            Assert.AreEqual("3 ", IteratorToString(stack));
            stack.Push(4);

            Assert.AreEqual("4 3 ", IteratorToString(stack));
            Assert.AreEqual(4, stack.Pop());
            Assert.AreEqual(3, stack.Pop());
            Assert.AreEqual(0, stack.Count, "New stack has zero size");

            foreach (int i in input)
            {
                stack.Push(i);
            }
            Assert.AreEqual(input.Length, stack.Count);
            Assert.AreEqual("9 6 4 2 3 ", IteratorToString(stack));
        }
예제 #21
0
        public double Evaluate(string expression)
        {
            ResizingArrayStack <char>   ops  = new ResizingArrayStack <char>();
            ResizingArrayStack <double> vals = new ResizingArrayStack <double>();

            for (int i = 0; i < expression.Length; i++)
            {
                char currChar = expression[i];
                if (currChar == '(')
                {
                    ;
                }
                else if (currChar == '+')
                {
                    ops.Push(expression[i]);
                }
                else if (currChar == '*')
                {
                    ops.Push(expression[i]);
                }
                else if (currChar == ')')
                {
                    char op = ops.Pop();
                    if (op == '+')
                    {
                        vals.Push(vals.Pop() + vals.Pop());
                    }
                    else if (op == '*')
                    {
                        vals.Push(vals.Pop() * vals.Pop());
                    }
                }
                else
                {
                    vals.Push(Char.GetNumericValue(currChar));
                }
            }

            return(vals.Pop());
        }
예제 #22
0
        void StackTest()
        {
            var strArr = FileHandler.ReadFileAsStrArr("words3.txt");

            strArr.Show();
            var stack = new ResizingArrayStack <string>();

            //var stack = new NodeStack<string>();
            foreach (var item in strArr)
            {
                stack.Push(item);
            }
            foreach (var item in stack)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();
            while (!stack.IsEmpty())
            {
                Console.Write(stack.Pop() + " ");
            }
            Console.ReadKey();
        }
        public bool Balanced(string input)
        {
            if (string.IsNullOrEmpty(input) || input.Length == 1)
            {
                return(false);
            }

            ResizingArrayStack <char> stack = new ResizingArrayStack <char>();

            for (int i = 0; i < input.Length; i++)
            {
                if (openingParenthesis(input[i]))
                {
                    stack.Push(input[i]);
                }

                if (closingParenthesis(input[i]) && !hasMatchingOpeningParenthesis(input[i], stack))
                {
                    return(false);
                }
            }

            return(stack.IsEmpty());
        }
        public void PopTest_EmptyStack()
        {
            IStack <int> stack = new ResizingArrayStack <int>();

            stack.Pop();
        }
예제 #25
0
 public QueueViaTwoStacks()
 {
     stack1 = new ResizingArrayStack <T>();
     stack2 = new ResizingArrayStack <T>();
 }
        public void ResizingArrayToString()
        {
            var stack = new ResizingArrayStack();

            StackIterateToString(stack);
        }
        public void ResizingArrayStackToBeTxt()
        {
            var stack = new ResizingArrayStack();

            ToBeTxt(stack);
        }
 private bool hasMatchingOpeningParenthesis(char openParen, ResizingArrayStack <char> stack)
 {
     return(!stack.IsEmpty() && stack.Pop() == parenthesesPair[openParen]);
 }
        public void PushTest_NullItem()
        {
            IStack <String> stack = new ResizingArrayStack <String>();

            stack.Push(null);
        }