1. Trang chủ
  2. » Luận Văn - Báo Cáo

DANH SÁCH LIÊN kết và cấu TRÚC dữ LIỆU đệ QUY

10 828 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 209,25 KB

Nội dung

ĐỀ TÀI DANH SÁCH LIÊN KẾT VÀ CẤU TRÚC DỮ LIỆU ĐỆ QUY Trong trình học tập, việc chuyển từ cấu trúc liệu đơn giản chuyển sang cấu trúc liệu nâng cao bước khó khăn học sinh giai đoạn đầu Việc hướng dẫn cách tỉ mỉ dễ hiểu dựa kiến thức học giúp cho trình tiếp cận học sinh thêm dễ dàng thêm hứng thú Với học sinh tiếp cận với giải thuật đệ quy, xin trình bày chuyên đề cấu trúc liệu danh sách liên kết (linked list) theo tiếp cận cấu trúc liệu đệ quy Với cách tiếp cận này, thấy cấu trúc danh sách liên kết quen thuộc, dễ hiểu dễ cài đặt “nhận thấy” danh sách liên kết có nhiều ứng dụng trình giải toán Phần lý thuyết tương đối ít, trình bày theo mạch giảng nên kiến thức ứng dụng toán cụ thể chưa có nhiều Mục đích chuyên đề bật cấu trúc đệ quy danh sách liên kết Một số tập nhỏ, câu hỏi với mục đích giúp học sinh tự cài đặt danh sách liên kết đơn giản Contents Đặt vấn đề Phương pháp biểu diễn dãy liệu có thứ tự: Dãy liệu có thứ tự tập hợp phần tử có thứ tự biểu diễn số cấu trúc liệu như: danh sách (list), hàng đợi (queue), ngăn xếp (stack) Phương pháp cài đặt mảng Những lợi ích biểu diễn mảng - - Dễ dàng truy cập tới phần tử mảng cách hiệu (Tính chất mảng gọi truy cập ngẫu nhiên)  Item[i] biểu diễn phần tử thứ i dãy  Mọi phần tử truy cập với độ phức tạp Cài đặt gọn Những nhược điểm cài đặt bẳng mảng: - Khi cài đặt thiết phải định kích thước tối đa cho mảng, cần thiết phải điều chỉnh kích thước tối đa - Khi thực thao tác chèn (insert) hay xóa (delete) phần tử dãy khó khăn Ví dụ: chèn phần tử có giá trị 63 vào hai phần tử số 52 73 Phương pháp cài đặt cấu trúc danh sách liên kết (linked list) - Ví dụ danh sách liên kết: - Một danh sách liên kết lưu trữ dãy phần tử có thứ tự nút độc lập gọi nút (node) Cấu trúc nút gồm:  Một phần chứa giá trị  Một liên kết (link) trỏ tới nút khác chứa giá trị phần tử - Nút cuối danh sách liên kết chứa giá trị trường liên kết link rỗng - Danh sách liên kết thể biến chứa giá trị trỏ tới nút So sánh Mảng Danh sách liên kết - Thể nhớ: o Khi khai báo mảng, phần tử chiếm vị trí ô nhớ liên tiếp nhớ máy tính: o Trong danh sách liên kết, nút đối tượng khác biệt trong nhớ Các nút không thiết phải nối tiếp nhớ biểu diễn mảng Đó lý mà cần phải có liên kết (link) để truy cập từ phần tử tới phần tử Hình ảnh thể lưu trữ danh sách liên kết ví dụ thực nhớ máy tính Những ưu điểm danh sách liên kết - Danh sách liên kết chứa số lượng phần tử (chỉ hạn chế nhớ máy tính) - Rất dễ dàng thực thao tác Chèn/Xóa nút vào danh sách mà không cần phải dịch chuyển phần tử khác Nhược điểm danh sách liên kết - Không hỗ trợ tính chất truy cập ngẫu nhiên mảng: muốn truy cập tới phần tử dãy, bắt buộc phải duyệt qua tất phần tử đứng trước - Trường liên kết (link) nút cần thêm không gian nhớ Ví dụ lưu trữ danh sách liên kết Một xâu kí tự xem danh sách liên kết kí tự - Mỗi nút danh sách biểu diễn kí tự Khai báo danh sách liên kết cho nút Type Pnode = ^Tnode; Tnode = Record Ch: char; Next: PNode; End; - Một xâu kí tự biểu diễn bẳng danh sách liên kết thể biến, biến chứa phẩn tử trỏ tới nút chứa kí tự chuỗi Ví dụ: Var str1: TNode; Biểu diễn chuỗi rỗng biến có giá trị NIL Var str1: TNode = NIL; Khi cài đặt hàm/ thủ tục thao tác chuỗi, đặt xâu làm tham số ví dụ length(str1) Một danh sách liên kết cấu trúc liệu đệ quy Định nghĩa đệ quy cho danh sách liên kết: danh sách liên kết là: a Một danh sách rỗng b Một nút đơn + danh sách liên kết Khi xem xét danh sách liên kết theo hướng đệ quy cho phép viết thủ tục đệ quy thao tác với danh sách liên kết o Ví dụ độ dài xâu kí tự:  Độ dài xâu ‘cat’ = + độ dài xâu ‘at’  Độ dài xâu ‘at’ = + độ dài xâu ‘t’  Độ dài xâu ‘t’ = + độ dài xâu rỗng (=0) Function length(TNode str): integer; Begin If (str = nil) then exit(0) Else exit(1+length(str.next)); End; - Truy viết hàm length o o Thể stack (ngăn xếp) - Lấy giá trị phần tử thứ i danh sách liên kết Hàm getNode(str,i): cho phép trả giá trị phần tử thứ i danh sách liên kết (i=0 phần tử danh sách) Phương án đệ quy: o Nút vị trí số danh sách liên kết thể chuỗi ‘linked’  = nút vị trí số danh sách liên kết thể chuỗi ‘inked’  = nút vị trí số danh sách liên kết thể chuỗi ‘nked’ Bài tập: viết hàm thực việc trả giá trị phần tử thứ i danh sách liên kết? Bài tập: thực hành giá trị địa ô nhớ tiến hành câu lệnh sau: Str.next.next có giá trị bao nhiêu? địa nào? Hoạt động phép gán Var1 := Var2; Chương trình lấy giá trị Var2, chép tới vị trí nhớ biến Var1 Thực hành 1: cho hình vẽ sau biểu diễn danh sách liên kết: Điều xảy ta thực phép gán sau: 1) str.next := temp.next; 2) temp := temp.next; Thực hành 2: Nếu biến temp không trỏ tới nút chứa giá trị ‘o’, viết câu lệnh gán phù hợp để temp trỏ tới nút ‘o’ đó? Ví dụ: Tạo danh sách liên kết - Hàm copy(str) cho phép tạo str trả biểu diễn tới - Tiếp cận đệ quy: o Neo: str rỗng, trả NIL o Đệ quy: chép phần tử đầu tiên, gọi đệ quy để chép phần lại Code: Function copy(TNode str): TNode; Var copyFirst: TNode; Begin If (str=nil) exit(nil) Else begin copyFirst := new TNode(str,ch,nil); copyFirst.next = copy(str.next); end; exit(copyFirst); End Sử dụng vòng lặp để duyệt qua danh sách liên kết - Rất nhiều toán yêu cầu phải duyệt qua toàn danh sách liên kết - Chúng ta vừa thực thao tác duyệt danh sách liên kết theo hướng đệ quy - Ngoài ra, sử dụng vòng lặp để thực việc - Tạo biến Trav để lưu vị trí thời duyệt đến danh sách liên kết: o While (trav NiL)  Trav:=trav.next; Ví dụ: duyệt qua toàn xâu kí tự, chuyển tất kí tự xâu thành chữ hoa Gợi ý: duyệt qua phần tử danh sách liên kết, sử dụng biến trav để lưu vị trí thời, nút, đổi giá trị kí tự thành kí tự hoa, chuyển trỏ sang phần tử Dừng trỏ NIL Kết quả: Xóa phần tử vị trí thứ i danh sách liên kết Có hai trường hợp: 1) Nếu i=0, xóa phần tử cách str:=str.next 2) Nếu i>0: chuyển trỏ sang phần tử Hỏi: câu lệnh nào? Chèn thêm phần tử vào vị trí thứ i danh sách liên kết Trường hợp 1: i=0 (chèn vào đầu danh sách) Hỏi: viết câu lệnh tạo nút mới? Hỏi: Câu lệnh cho phép chèn nút vào danh sách? Trường hợp 2: i>0 - Duyệt đến vị trí nút i-1 - Hỏi: viết câu lệnh chèn kí tự ‘m’ vào nút khởi tạo? câu lệnh gắn nút vào vị trí thứ i? Một số biến thể danh sách liên kết: Danh sách liên kết kép - Danh sách liên kết với nút rỗng trước Bài tập đề nghị: Viết giải thuật delete() với tham số đầu vào giá trị k kiểu interger Phương thức delete() thực xóa phần tử thứ k (nếu có) Linked List Cài đặt phương thức find() với tham số đầu vào khóa key kiểu String Kết trả true tìm thấy Linked List Ngược lại false Giả sử x Node linked list Đoạn mã nguồn sau thực việc gì? x.next = x.next.next; Giả sử x Node danh sách liên kết Đoạn code sau thực điều gì? t.next = x.next; x.next = t; Tại đoạn code sau không cho kết giống đoạn code câu x.next = t; t.next = x.next; Viết phương thức removeAfter() với tham số đầu vào Node x Linked list Yêu của phương thức xóa node sau node x Viết phương thức insertAfter() với tham số đầu vào Node Yêu cầu phương thức thêm Node thứ vào sau node thứ (node thứ có sẵn linked list) Trường hợp node null không thực Cài đặt phương thức remove() với tham số đầu vào linked list khóa key kiểu String Yêu cầu phương thức xóa hết tất node linked list có khóa key Cài đặt phương thức tìm giá trị lớn danh sách liên kết 10 Sử dụng giải thuật đệ quy để cài đặt giải thuật câu 8, 11 Sử dụng giải thuật đệ quy để in phần tử linked list theo thứ tự ngược Trên chút kinh nghiệm thân trình dạy cấu trúc liệu danh sách liên kết cho học sinh lớp 10 muốn chia sẻ với đồng nghiệp Rất mong thầy cô góp ý, bảo thêm 10

Ngày đăng: 02/06/2016, 21:55

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w