2014-02-09 3 views
0

Что мне не хватает для решения этой проблемы?Сравнение стека между 3 стеками целых чисел

проблема домашних заданий говорит:

Предположим, у вас есть 3 стеков целых чисел, s1 (который имеет значения в нем), s2 (который является пустым) и s3 (также пустые). Напишите код для сортировки записей в s1, используя приведенный здесь алгоритм (отсортированные значения будут в s2 в конце): В любой момент времени s2 будет содержать записи в отсортированном порядке с наименьшим значением в верхней части. Переместите верхний ввод s1 в s2. Удалите и рассмотрим верхнюю запись t s1. Удалите записи стека s2 и поместите их в стек s3, пока не дойдете до правильного места, чтобы положить t. Затем поместите t на s2. Затем переместите все записи с s3 на s2.

мой код до сих пор:

public class practice2 
{ 
public static void main(String[] args) 
{ 
    Stack<Integer> s1 = new Stack<Integer>(); 
    Stack<Integer> s2 = new Stack<Integer>(); 
    Stack<Integer> s3 = new Stack<Integer>(); 

    s1.push(1); 
    s1.push(61); 
    s1.push(21); 
    s1.push(31); 
    s1.push(51); 
    s1.push(111); 

    s2.push(s1.pop()); 

    while(!s1.isEmpty()) 
    { 
     if(s1.peek() < s2.peek()) 
     { 
      s2.push(s1.pop()); 
     } 
     else 
     { 
      s3.push(s1.pop()); 
     } 
    } 

    if(s2.peek() < s3.peek()) 
    { 
     while(!s2.isEmpty()) 
     { 
      s1.push(s2.pop()); 
     } 
    } 

    while(!s1.isEmpty()) 
    { 
     if(s1.peek() > s3.peek()) 
     { 
      s2.push(s1.pop()); 
     } 
     else 
     s2.push(s3.pop()); 
    } 

    } 
} 

ответ

0

Ваш код не следовать алгоритму, вы дали. Алгоритм вы предназначены для реализации является

  1. Снимите и рассмотрим верхнюю запись T из s1.
  2. Удаление записей из стека s2 и поместить их в стек s3, пока вы не достигнете правильное место, чтобы положить т.
  3. Затем положить t на s2.
  4. Далее переместить все данные от s3 до s2.

Так написать псевдокод, который делает это:

  1. Получить/заглядывать в s1 - т
  2. Хотя т больше, то сверху s2, толчок началу от s2 на s3
  3. Нажмите т на s2
  4. в то время как s3 не является пустым нажатием верхней части s3 на s2
  5. повторить для всех s1

В настоящее время ваш код делает следующее Крыло:

  1. Хотя s1 не пусто: Если вершина s1 меньше верхней части s2

    • затем нажать сверху на s2
    • еще нажать на s3
  2. Если верх s2 меньше, чем в верхней части s3

    • Пуш все из s2 на s1
  3. Хотя s1 не пусто: Если верхняя часть s1 больше, чем верхняя часть s3

    • затем Нажмите верхнюю s1 на s2
    • еще нажимные верхнюю часть s3 на s2

Надеется, что это помогает.

Смежные вопросы