Thao tác với danh sách liên kết 4.1, Thêm

Một phần của tài liệu MỞ RỘNG THUẬT TOÁN tìm KIẾM, sắp xếp BẰNG NGÔN NGỮ PYTHON (Trang 31 - 39)

C. Mở rộn g: Danh sách liên kết đơn

4, Thao tác với danh sách liên kết 4.1, Thêm

4.1, Thêm

Tươ ng tự như mả ng, danh sách liên kế t đơ n cũng có rấ t nhiề u kiể u thêm. Tôi sẽ giới thiệ u 3 kiể u thêm cơ bả n : thêm đầ u, thêm cuố i và thêm giữ a và sẽ chỉ nói về thêm dầu vì các phầ n sau khá giống nhau.

Vớ i thêm đầ u, chúng ta cầ n truyề n tham chiế u mả ng và truyền đị a chỉ con trỏ p của Node mà chúng ta đã tạ o. Chúng ta sẽ chia ra làm 2 trườ ng hợ p là danh sách liên kết đơ n rỗ ng và danh sách liên kế t đơ n đã có phầ n tử . Vớ i danh sách liên kết đơn rỗng cũng đồ ng nghĩa vớ i con trỏ pHead và pTail trỏ tớ i rỗng. Vậy lúc khi thêm 1 Node vào, Node ấ y vừ a là Node đầ u đồ ng thờ i là Node cuố i, cho nên chúng ta sẽ cập nhật

pHead và pTail sẽ chứ a đị a chỉ củ a Node mớ i tạ o. Vớ i danh sách liên kết đơn đã có phầ n tử , chúng ta sẽ đư a Node mớ i lên đầ u, cho con trỏ trong Node trỏ t ới Node đầu cũ và cậ p nhậ t lạ i pHead bở i lúc này, Node mớ i thêm đã đứng đầu !

Tươ ng tự như thế vớ i phầ n thêm cuối :

Vớ i phầ n thêm sau, chỉ có điề u khác biệ t ở chỗ, chúng ta cần truyền vào sau Node có giá trị nào và chúng ta muố n tạ o Node có giá trị bao nhiêu :

4.2, Xóa

Tươ ng tự thêm, xóa cũng có xóa đầ u, xóa cuố i và ngoài ra còn có xóa chọn theo giá trị

trong Node là gì. Xóa mà tôi dề cậ p trong đây, chính là giả i phóng bộ nhớ , trả lại bổ

nhớ cho máy tính. Khi ta cấ p phát bộ nhớ độ ng là lúc mà ta xin máy tính cấp cho ta

mộ t vùng nhớ để chứ a giá trị . Vậ y khi kế t thúc chươ ng trình hay không muốn sử dụng, loạ i bỏ thì chúng ta sẽ sử dụ ng đế n giả i phóng bộ nhớ.

Tôi sẽ đi sâu vào xóa ở đầ u vì các xóa kia cũng tương tự như thế. Xóa đầu cũng chia ra làm hai trườ ng hợ p. Trườ ng hợ p thứ nhấ t cũng dễ hiể u, kiểm tra xem danh sách có

phầ n tử nào không. Trườ ng hợ p thứ hai, ta sẽ cầ n đế n con trỏ trung gian để xóa phần tử phía trướ c và cậ p nhậ t lạ i con trỏ đầ u ( pHead ). Giả i phóng chúng ta sẽ dùng hàm free( ) trong C.

Tươ ng tự vớ i xóa cuối:

Và xóa chọ n khác ở chỗ chúng ta truyền số cần xóa vào:

4.3, Duyệt

Tươ ng tự mả ng, chúng ta có vòng lặ p for ( ) để duyệ t, như ng vớ i các chỉ số, điều kiện bên trong khác. Chúng ta sẽ dùng đị a chỉ để duyệ t và truy cậ p các thành phần bên

trong Node. Điề u kiệ n sẽ chạ y đế n khi nào NULL thì dừng. Trong vòng lặp chúng ta sẽ cho in ra thành phầ n giá trị và thành phầ n liên kết bên trong nó.

4.4, Sắp xếp

Ở đây, tôi dùng thuậ t toán đổ i chỗ trự c tiế p – thuậ t toán căn bản nhấ t và dễ nhấ t. Đổi chỗ thì có 2 kiể u đổ i chỗ : đổ i chỗ thành phầ n liên kế t hoặ c đổ i chỗ thành phầ n giá trị. Đoạ n code trên, tôi sử dụ ng đổ i chỗ thành phầ n giá trị và sắ p xế p tăng dần. Còn về đổi

chỗ thì cũng tươ ng tự như đổ i chỗ trự c tiế p củ a mả ng. Chúng ta so sánh bắt đầu từ

phầ n tử đầ u vớ i các phầ n tử tiế p theo, sau đó tăng dầ n phầ n tử đầ u lên cho đến khi còn phầ n tử n và n-1 so sánh với nhau.

Độ phứ c tạ p củ a thuậ t toán Interchange Sort cũng như trong mảng. Mỗi vòng lặp While có trườ ng hợ p tệ nhấ t sẽ là n lầ n. Vậ y độ phứ c tạ p củ a cả thuậ t toán sắp xếptheo quy tắ c nhân sẽ là O(n^2).

4.5, Tìm kiếm

Thuậ t toán tìm kiế m cũng vô cùng gầ n gũi, chúng ta sẽ sử dụ ng thuậ t toán tìm kiếm tuyế n tính, tứ c là duyệ t từ trái sang phả i. Sử dụ ng vòng lặ p for ( ) tươ ng tự như ở trên, tìm giá trị bằ ng nó, nế u có thì trả về con trỏ chứa Node, nếu không thì trả về NULL.

Phầ n tìm kiế m này là tìm kiế m tuyế n tính, sẽ có 1 vòng lặ p chạ y tệ nhấ t là n lầ n, vậy ta có thể đư a ra kế t luậ n rằ ng, độ phứ c tạ p củ a tìm kiế m tuyế n tính ở đây là O(n).

4.6, Kết luận

Sau khi hiể u đượ c nhữ ng phầ n cơ bả n trên, chúng ta có thể làm đượ c một vài tính năng khác như trong mả ng, tự lậ p menu để ngườ i dùng có thể sử dụ ng, có thể tham khảo menu củ a tôi dưới đây :

Một phần của tài liệu MỞ RỘNG THUẬT TOÁN tìm KIẾM, sắp xếp BẰNG NGÔN NGỮ PYTHON (Trang 31 - 39)

Tải bản đầy đủ (DOCX)

(42 trang)
w