如何反转堆栈?

时间:2011-04-21 22:44:26

标签: vb.net stack reverse

我需要编写一个VB.NET代码来使用堆栈来反转给定的字符。 输入:'S','T','A','C','K'

到目前为止,我已输入字母,但我不知道如何让控制台反转它。我是编程的初学者,请原谅我的无知。

对于如何完成它的解释也将非常感激。

到目前为止我得到了什么。

模块模块1

Sub Main()
    Dim StackObject As New Stack
    StackObject.Push("S")
    Console.WriteLine(StackObject.Peek)
    StackObject.Push("T")
    Console.WriteLine(StackObject.Peek)
    StackObject.Push("A")
    Console.WriteLine(StackObject.Peek)
    StackObject.Push("C")
    Console.WriteLine(StackObject.Peek)
    StackObject.Push("K")
    Console.WriteLine(StackObject.Peek)
End Sub

结束模块

我只需要将其反转。

我明白了!

Module Module1

Sub Main()
    Dim StackObject As New Stack
    StackObject.Push("S")
    StackObject.Push("T")
    StackObject.Push("A")
    StackObject.Push("C")
    StackObject.Push("K")

    For Each cur As String In StackObject
        Console.WriteLine(cur)
    Next
End Sub

结束模块

这就是它的完成方式。

4 个答案:

答案 0 :(得分:5)

假设你有一堆盘子:

1
2
3
4
5

要反转它们,请取下第一块板,然后将其放入新桩

2
3
4
5 1

然后你把下一个盘子拿下来放在堆上。

3
4 2
5 1

重复!

答案 1 :(得分:2)

伪代码(我真的不懂VB.NET):

While (not end-of-input) Do Stack.Push(ReadNextInputChar); 

While (not Stack.IsEmpty) Do WriteCharToOutput(Stack.Pop);

答案 2 :(得分:1)

Module Module1

    Sub Main()
        Dim StackObject As New Stack
        StackObject.Push("S")
        StackObject.Push("T")
        StackObject.Push("A")
        StackObject.Push("C")
        StackObject.Push("K")

        For Each cur As String In StackObject
            Console.WriteLine(cur)
        Next
    End Sub
End Module

答案 3 :(得分:0)

我不确定VB语法,但这就是我们如何继续反转堆栈。这也是就地的。 (它使用递归)

void appendToStack (std::stack<int> &stk, int newElement)
{
    if (stk.empty())
        stk.push(newElement);
    else
    {
    int oldElement = stk.top();
    stk.pop();
    appendToStack (stk, newElement);
    stk.push (oldElement);
    }
}

void reverseStackInplace (std::stack<int> &stk)
{
    if (stk.empty())
        return;
    int element = stk.top();
    stk.pop();
    reverseStackInplace(stk);
    appendToStack (stk, element);
}