示例#1
0
        public void Rotate(int idx, int n)
        {
            var t = stack.top() - 1;            /* end of stack segment being rotated */
            var p = stack.absIndex(idx) - 1;    /* start of segment */
            var m = n >= 0 ? t - n : p - n - 1; /* end of prefix */

            stack.reverse(p, m);                /* reverse the prefix with length 'n' */
            stack.reverse(m + 1, t);            /* reverse the suffix */
            stack.reverse(p, t);
        }
示例#2
0
        public void Rotate(int idx, int n)
        {
            var t = stack.top - 1;
            var p = stack.absIndex(idx) - 1;
            int m;

            if (n >= 0)
            {
                m = t - n;
            }
            else
            {
                m = p - n - 1;
            }

            stack.reverse(p, m);
            stack.reverse(m + 1, t);
            stack.reverse(p, t);
        }