2011-11-10 24 views
9

Tôi biết về System.Collections.Stack. Tôi đang tìm một lớp hỗ trợ PushFront() & PushBack().Có một lớp ngăn xếp hai mặt trong .net không?

+0

Tôi chắc chắn nếu nó tồn tại, bạn sẽ tìm thấy nó trong không gian tên bộ sưu tập. – ChaosPandion

+0

Cái mà bạn gọi là * Ngăn xếp * không phải là một nếu nó hỗ trợ đẩy lùi. –

Trả lời

11

Tại sao không chỉ sử dụng/gói LinkedList<T>? Nó có các phương thức AddFirstAddLast. Bạn có thể bọc nó để ẩn các phương thức AddBefore vv.

Thuật ngữ phổ biến cho điều này là deque (có nghĩa là hàng đợi đã kết thúc gấp đôi). Nếu vì lý do nào đó, hãy gói LinkedList<T> không đủ (cần!), Bạn có thể xem triển khai của Eric Lippert là immutable deque.

9

Có vẻ như bạn muốn một cái gì đó thường được gọi là deque. Tôi gần nhất nhận thức được trong .NET là LinkedList<T>. Tôi không tin rằng có một được xây dựng từ một bộ đệm tròn (mở rộng theo yêu cầu), đó là cách bạn có thể muốn xây dựng nó từ đầu.

Tất nhiên, bạn có thể tự mình thực hiện - nhưng tôi có thể sử dụng LinkedList<T> trừ khi tôi có lý do thực sự không tốt. Eric Lippert cũng có an immutable implementation you could look at (blog post covering it), nhưng rõ ràng là bạn muốn viết một loạt các bài kiểm tra, v.v ... và bạn có thể không muốn một sự bất biến.

+0

họ nên xem xét đổi tên trang web này thành askjonskeet.com –

+1

@ SethReno: Điều đó đã được thực hiện ... hãy dùng thử :) –

0

Tại sao không sử dụng LinkedList<T>? Nó cho phép bổ sung để bắt đầu, kết thúc và bất cứ nơi nào ở giữa. Nếu bạn không muốn phơi bày một số phương thức LinkedList<T> thì bạn luôn có thể bọc nó và chỉ phơi bày các phương pháp mà bạn muốn phơi bày.

Các vấn đề liên quan