2011-11-10 8 views
9

Conozco System.Collections.Stack. Estoy buscando una clase que sea compatible con PushFront() & PushBack().¿Hay una clase de pila de doble cara en .net?

+0

Estoy seguro de que, si existiera, lo encontraría en el espacio de nombres de las colecciones. – ChaosPandion

+0

Lo que usted llama * Stack * no es uno si admite push back. –

Respuesta

11

¿Por qué no usar/envolver LinkedList<T>? Tiene los métodos AddFirst y AddLast. Puede envolverlo para ocultar los métodos AddBefore etc.

El término común para esto es deque (significa cola de doble final). Si por algún motivo ajustar un LinkedList<T> no es suficiente (¡debería!), Podría consultar la implementación de Eric Lippert de un immutable deque.

9

Parece que quiere algo normalmente llamado deque. Lo más cerca que estoy enterado en .NET es LinkedList<T>. No creo que haya uno creado a partir de un búfer circular (expandiéndose según se requiera), que es la forma en que probablemente querría construirlo desde cero.

Por supuesto, podría implementarlo usted mismo, pero probablemente usaría LinkedList<T> a menos que tuviera una buena razón para no hacerlo. Eric Lippert también tiene an immutable implementation you could look at (blog post covering it), pero obviamente querrá escribir un montón de pruebas, etc ... y no puede querer una inmutable.

+0

deberían considerar el cambio de nombre de este sitio a askjonskeet.com –

+1

@SethReno: Eso ya está tomado ... pruébalo :) –

0

¿Por qué no utilizar un LinkedList<T>? Permite la adición de inicio, final y cualquier punto intermedio. Si no desea exponer algunos de los métodos LinkedList<T>, siempre puede envolverlo y solo exponer los métodos que desea exponer.

Cuestiones relacionadas