2014-12-17 2 views
0

Мне задали вопрос в интервью, как показано ниже.Можем ли мы создать собственную реализацию структуры данных стека с помощью массива или списка в java?

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

Возможно ли это?

+1

Да. На самом деле Java имеет ['Stack'] (http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html). Что вы пробовали? –

+0

Конечно, вы можете использовать любой класс для данных. В большинстве случаев вам просто нужно добавить некоторые указатели на другие элементы. – Sirko

+3

Да, но это был бы связанный список в его ядре ... – MadProgrammer

ответ

1

Вы можете использовать стек вызовов, но это не будет полезно в большинстве сценариев.

Предположим, у вас есть интерактивное приложение, в котором пользователь может выбрать push или pop.

У вас будет метод с одной локальной переменной, которая содержит верхний элемент стека.

Этот метод попросит пользователя выбрать, следует ли поместить последний элемент или нажать новый элемент.

Если пользователь выбирает push, метод выдает рекурсивный вызов самому себе, передавая вставленный элемент в качестве аргумента (который будет храниться в локальной переменной вызываемого метода).

Если пользователь выбирает pop, метод возвращает свою локальную переменную вызывающему методу.

Вот некоторые псевдо-код:

public static Object stack (Object element) 
{ 
    Object top = element; 

    int input = 0; 
    while (input != 2) { 
     input = ... // get user input - 1 for push 2 for pop 
     if (input == 1) { 
      Object newElement = ... // get input from user 
      Object poppedElement = stack (newElement); // push the new element 
     } 
    } 
    return top; // pop the top of the stack 
} 
+0

«открытый статический стек объекта (элемент объекта)», это была бы правильная подпись метода. Но эта реализация будет содержать только один элемент, или я что-то упускаю? – aurelius

+1

@aurelianus Я сказал, что это код pdeudo :) исправлен тип возврата. Он может содержать столько элементов, сколько есть в стеке вызовов для рекурсивных вызовов метода стека. Если пользователь набирает 1 и вводит новый элемент и повторяет процесс 10 раз, 'stack' вызывается 10 раз рекурсивно, а локальная переменная в каждом из них содержит другой элемент. – Eran

+0

спасибо, за подробное описание :) – aurelius

1

Ну, если вы не можете использовать любой набор или массив, вы можете использовать файл, и каждая строка этого файла может быть элемент, помещенный в стек (файл), И давая принцип LIFO стека, чем первая строка текстового файла должна быть восстановлена ​​по умолчанию, или толкаемый элемент будет добавлен в первую строку текстового файла.

+0

Большое вам спасибо за ваш вклад. –

+0

вас больше всего приветствуют! – aurelius

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