Существует ли класс двустороннего стека в .net?

#.net

#.net

Вопрос:

Я знаю об этой системе.Коллекции.Стек. Я ищу класс, который поддерживает PushFront () и PushBack().

Комментарии:

1. Я уверен, что если бы он существовал, вы бы нашли его в пространстве имен collections.

2. То, что вы называете стеком , таковым не является, если оно поддерживает push back.

Ответ №1:

Почему бы просто не использовать / wrap LinkedList<T> ? У него есть методы AddFirst и AddLast . Вы можете обернуть его, чтобы скрыть AddBefore и т.д. методы.

Общий термин для этого — deque (это означает очередь с двойным завершением). Если по какой-то причине обертывания LinkedList<T> недостаточно (а должно быть!), вы могли бы взглянуть на реализацию неизменяемого deque Эрика Липперта.

Ответ №2:

Звучит так, как будто вам нужно что-то, что обычно называется deque. Самый близкий, о котором я знаю в .NET, это LinkedList<T> . Я не верю, что существует класс, созданный из циклического буфера (расширяющийся по мере необходимости), который, вероятно, вы хотели бы создать с нуля.

Конечно, вы могли бы реализовать это самостоятельно, но я бы, вероятно, использовал LinkedList<T> , если бы у меня не было действительно веской причины не делать этого. У Эрика Липперта также есть неизменяемая реализация, на которую вы могли бы взглянуть (см. Его сообщение в блоге, посвященное этому), но, очевидно, вы хотели бы написать кучу тестов и т.д. … И вы можете не хотеть неизменяемый.

Комментарии:

1. им следует подумать о переименовании этого сайта в askjonskeet.com

Ответ №3:

То, что вы ищете, — это deque. Вот пример:http://www.codeproject.com/KB/recipes/deque.aspx

Ответ №4:

Почему бы не использовать LinkedList<T> ? Он позволяет добавлять в начало, конец и в любое промежуточное место. Если вы не хотите предоставлять некоторые из LinkedList<T> методов, вы всегда можете обернуть его и предоставить только те методы, которые вы хотите предоставить.