【问题标题】:How to order dynamic structures in java如何在java中对动态结构进行排序
【发布时间】:2012-03-27 20:43:46
【问题描述】:

我正在学习 Java 测试,我发现了一个练习,其中我有一堆数字(即 2-4-1-5-3,第一个插入的是 2,插入的是 3你可以偷看)和一个循环的字符列表(即a->d->c->b->e->,是第一个节点)所以如果堆栈的第一个数字是3,我有插入一个简单的列表字符号 3,即 c。所以问题是必须在不使用任何辅助结构的情况下完成练习,例如辅助列表或辅助堆栈。我的疑问是如何在不丢失第 3 和第 5 并且不将它们放置在辅助结构中的情况下达到堆栈中的第 1 位。

提前,谢谢。

【问题讨论】:

  • 嗯,你必须把它们放在某个地方,你可以使用的唯一其他结构是列表......
  • 为什么需要保留堆栈中的值?如果我正确理解了分配,一旦您使用堆栈值索引到列表中,您就完成了它并且可以忘记它。换句话说,重复result.append(list.get(stack.pop())) 直到堆栈为空。这不正确吗?
  • @jpm 是的,一个我在列表中插入分配的字符,我不需要值,但第一个插入的必须是等于 1 的字符,在这种情况下是 c ,但我不能丢失数字 3 和 5,因为我需要稍后插入这些字符。
  • @trutheality 它说它可以在不将它们放在其他地方的情况下做到这一点......老实说,这是一个测试练习,我使用另一个结构来放置它们,并且教授告诉我,这显然是错误的,并且在没有其他额外结构的情况下也是可行的。
  • 我认为我们中的一个人误解了这个问题。你有机会发布实际的文字吗?

标签: java list stack


【解决方案1】:

编写一个递归函数并将堆栈用于您的列表

【讨论】:

  • 它会返回什么?将堆栈用于我的列表是什么意思?将字符传输到堆栈并将整数传输到列表?
【解决方案2】:

我必须在一个简单的列表中插入 3 号字符,即 c

可能是我误解了您的 excersize,但您可以创建一个包含特定数量(空)节点的列表。您已经知道有多少个节点。
然后例如如果堆栈的第一个数字是 3,则将 c 插入结果列表的第三个节点等。

完成后,列表将被排序,因为您将每个数字输入到正确的节点。

【讨论】:

  • 这可行,但仅适用于特定情况,我需要它作为通用方法。
  • 但它是通用的。你弹出堆栈。从列表中获取相应的字符并将其插入到弹出值指示的节点中。你不断弹出堆栈(使用弹出值作为索引)并插入直到完成
【解决方案3】:

您可以使用递归并将它们本地存储在调用堆栈中。

List<Character> charList;

func() {
    Stack<Integer> indexList = new Stack<Integer>();
    indexList.addAll(Arrays.asList(2,4,1,5,3));
    charList = new ArrayList<Character>();
    charList.addAll(Arrays.asList('a','d','c','b','e'));

    recurse(indexList,0);

    for(char c : charList) {
        System.out.println(c);
    }
}

private void recurse(Stack<Integer> indexList, int index){
    int indexChar = indexList.pop();
    char retChar = charList.get(indexChar -1);  
    if(!indexList.isEmpty()) {
        recurse(indexList, (index + 1));
    }       
    charList.set(index, retChar);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2021-12-15
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多