2012-03-27 2 views
1

Я учился на тест Java, и я нашел упражнение, в котором у меня есть стек числа (т.е. 2-4-1-5-3, являющийся вторым, и 3 - тот, который вы можете заглянуть) и круговой список символов (т. е. a-> d-> c-> b-> e->, являющийся первым узлом), поэтому, если первое число стек равен 3, мне нужно вставить простой символ списка 3, который равен c. Поэтому проблема заключается в том, что упражнение должно выполняться без использования каких-либо вспомогательных структур, таких как вспомогательный список или вспомогательный стек. Мое сомнение в том, как я могу достигнуть номера 1 в стеке, не теряя числа 3 и номер 5 и не помещая их в вспомогательную структуру.Как заказать динамические структуры в java

Заранее благодарим.

+0

Ну, вы должны поместить их куда-нибудь, а только другая структура, вы можете использовать список ... – trutheality

+0

Зачем вам нужно, чтобы сохранить значения в стеке? Если я правильно понял назначение, как только вы использовали значение стека для индексации в списке, вы закончите с ним и можете забыть об этом. Другими словами, повторите 'result.append (list.get (stack.pop()))' до тех пор, пока стек не будет пустым. Это неправильно? – jpm

+0

@jpm yes, one Я вставляю назначенный символ в список, мне не нужно значение, но первый для вставки должен быть символом, равным 1, который в этом случае является c, но я не могу позволить себе потерять число 3 и 5, потому что мне нужно вставить эти символы позже. – Jmdjorgeek

ответ

0

Написать рекурсивную функцию и использовать стек для вашего списка

+0

что бы это получилось?и что вы подразумеваете, используя стек для моего списка? перенос символов в стек и целые числа в список? – Jmdjorgeek

0

я должен вставить в простом списке полукокс номер 3, который является с

Может быть, я неправильно понял ваш excersize но вы может создать список с определенным количеством (пустых) узлов. Вы уже знаете, сколько узлов.
Затем, например, если первый номер стека равен 3, тогда вставьте c в третий узел результирующего списка и т. д.

После того, как вы закончите, список будет отсортирован с момента ввода каждого номера в нужный узел.

+0

, который будет работать, но только для конкретного случая, мне нужен его как общий метод. – Jmdjorgeek

+0

Но это generic.You поп стека. Получите соответствующий символ из списка и вставьте его в узел, указанный всплываемым значением. Вы продолжаете выскакивать стек (используя всплывающее значение как индекс) и вставлять, пока не закончите – Cratylus

0

Вы можете использовать рекурсию и хранить ее локально в стеке вызовов.

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); 
} 
Смежные вопросы