2012-05-22 37 views
9

Tôi được hỏi câu hỏi như vậy và tôi có câu nói của riêng mình nhưng tôi không thực sự chắc chắn những gì để nói về khuyết điểm và thuận? Microsoft đã đặt câu hỏi này cho một trong các ứng cử viên của nó.Microsoft Asks: Singly List hoặc Doubly List? Những ưu và nhược điểm của việc sử dụng mỗi cái là gì?

Danh sách được liên kết đơn lẻ cho phép bạn đi theo một hướng. Trong khi đó, danh sách được liên kết kép có hai chiều hướng tiếp theo và trước đó.

Dưới đây là một hình ảnh đẹp thu hút những người được liên kết Singly và Doubly LinkedLists.

enter image description here

Tuy nhiên, làm thế nào để bạn giải thích những ưu và nhược điểm của các mặt hàng này ở cách có trật tự hơn?

+0

Một thiết bị linh hoạt hơn, thiết bị kia yêu cầu chi phí cao hơn. Ngoài ra, danh sách được liên kết của bạn thực sự là danh sách được liên kết tròn. – robert

+0

Tôi đã sử dụng những hình ảnh đó để đưa ra một thực tế. – Tarik

+0

Bạn có thể muốn xem [plain-linked-and-double-linked-lists-when-and-why] (http://stackoverflow.com/questions/712429/plain-linked-and-double-linked-lists- khi nào và tại sao) – nawfal

Trả lời

14

Tôi được hỏi câu hỏi như vậy và tôi có câu nói của riêng mình nhưng tôi không thực sự chắc chắn những gì để nói về khuyết điểm và thuận?

Tất cả đều được sử dụng. Có một giao dịch ở đây.

Danh sách liên kết đơn lẻ đơn giản hơn về triển khai và thường có yêu cầu bộ nhớ nhỏ hơn vì nó chỉ cần giữ cho thành viên chuyển tiếp tham chiếu tại chỗ.

Danh sách được liên kết đôi lần lặp lại hiệu quả hơn, đặc biệt nếu bạn cần lặp lại ngược lại (hiệu quả khủng khiếp với một danh sách liên kết) và xóa các nút cụ thể hiệu quả hơn.

Điều đó đang được nói - vì bạn có .NET được gắn thẻ này, danh sách được liên kết kép cũng có lợi thế là được trực tiếp trong khung dưới dạng lớp học LinkedList<T>. Điều này cung cấp một lợi thế rất lớn trong đó bạn không phải thực hiện, kiểm tra và duy trì lớp bộ sưu tập của riêng bạn.

+0

Tôi không nghĩ rằng Singly LinkedList được xác định trước trong FCL phải không? – Tarik

2

Advantage của danh sách liên kết kép: Có thể truyền tải trong cả hai hướng

Advantage của danh sách liên kết đơn: Ít công việc gia đình để được thực hiện trên cập nhật/chèn/xóa, sử dụng bộ nhớ ít hơn.

2

Vâng, điều đó tùy thuộc vào tình huống. Nếu bạn cần để có thể nhanh chóng có được cả trước đó cũng như các yếu tố tiếp theo từ một yếu tố nhất định sau đó một danh sách liên kết gấp đôi là tốt nhất.

Nếu bạn chỉ cần lấy phần tử tiếp theo từ phần tử đã cho, thì danh sách liên kết đơn lẻ là đủ tốt.

4

Trong khi đơn lẻ danh sách liên kết sử dụng ít bộ nhớ cho mỗi nút (một con trỏ vs hai con trỏ), hoạt động xóa nó là O(N) nếu tất cả các bạn có là một con trỏ đến nút mà bạn muốn xóa, trong khi xóa gấp đôi liên kết là O(1). Có một mẹo nhỏ được biết đến cho phép bạn xóa khỏi danh sách được liên kết đơn lẻ trong O(1), nhưng danh sách phải tròn để nó hoạt động (di chuyển nội dung của next vào hiện tại và xóa next).

Danh sách liên kết đôi có thể được sử dụng ở những nơi danh sách được liên kết đơn lẻ sẽ không hoạt động (hàng đợi đã kết thúc gấp đôi), nhưng yêu cầu "vệ sinh" nhiều hơn một chút và ít hiệu quả hơn khi chèn.

9

Mặc dù câu hỏi này đã được trả lời, tôi bằng cách nào đó không hài lòng với câu trả lời (không có vi phạm nghĩa), vì vậy đây là làm thế nào tôi sẽ trả lời với nó:

gì để sử dụng - Danh mục đơn lẻ hoặc là lợi đôi đường liên kết phụ thuộc vào những gì bạn dự định đạt được và những hạn chế hệ thống, nếu có.

danh sách đơn lẻ liên kết:

Ưu điểm: đơn giản trong thực hiện, đòi hỏi bộ nhớ tương đối thấp hơn cho việc lưu trữ, giả sử bạn cần phải xóa/chèn (at) nút tiếp theo - xóa/chèn nhanh.

Nhược điểm: Không thể lặp lại ngược lại, cần duy trì một nút điều khiển cho nút đầu của danh sách khác, danh sách sẽ bị mất trong bộ nhớ. Nếu bạn đang xóa nút trước đó hoặc chèn vào nút trước đó, bạn sẽ cần phải duyệt danh sách từ đầu đến nút trước đó để có thể thực hiện các hoạt động đó - thời gian O (N).

--Vì vậy, điều này sẽ được sử dụng khi bạn có bộ nhớ thấp hơn và mục tiêu chính của bạn là chèn/xóa và không tìm kiếm các yếu tố.

Danh sách được liên kết đôi:

Ưu điểm: Có thể được lặp lại theo hướng ngược lại cũng như ngược lại. Trong trường hợp cần xóa nút trước đó, không cần phải đi qua từ nút đầu, vì nút bị xóa có thể được tìm thấy từ con trỏ ‘.previous’.

Nhược điểm: Tương đối phức tạp để triển khai, yêu cầu bộ nhớ nhiều hơn để lưu trữ (con trỏ 1 '.previous' trên mỗi nút). Chèn và xóa tương đối tốn nhiều thời gian hơn (gán/chỉ định lại con trỏ '.previous' cho các nút lân cận)

--Điều này sẽ được sử dụng khi bạn không có hoặc hạn chế tối thiểu bộ nhớ, và mục tiêu chính của bạn là tìm kiếm các phần tử .

Nếu có một số ưu và nhược điểm khác, vui lòng thêm, trả lời trong nhận xét. Cảm ơn!

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