Chương 9 Cấu trúc tuyến tính C++ part 2

25 454 3
Chương 9 Cấu trúc tuyến tính C++ part 2

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 9_Cấu trúc tuyến tính C++_part 2

Phần 3: Cấu trúc liệu giải thuật Chương 9: Các cấu trúc tuyến tính Phần B: Cấu trúc Danh Sách Các nội dung Cấu trúc danh sách      Mô tả Cấu trúc vào sau trước (LIFO) (Stack-Ngăn xếp) Cấu trúc vào trước trước (FIFO) (QueueHàng đợi) Một số ứng dụng ngăn xếp hàng đợi Giới thiệu - Mô tả cấu trúc   Danh sách tuyến tính: CTDL gồm hay nhiều phần tử kiểu liệu tồn trật tự tuyến tính phần tử Kí hiệu: L =    x1 gọi phần tử (đầu) danh sách   n  x1,x2, ,xn phần tử danh sách, xn gọi phần tử cuối (đuôi) danh sách Trật tự tuyến tính: trật tự trước-sau phần tử, tức với cặp phần tử (1  i,j  n i  j) tập phần tử ln có trật tự trước sau Quy ước: trường hợp đặc biệt danh sách khơng có phần tử nào, gọi danh sách rỗng, kí hiệu  (L = ) Giới thiệu – Đặc trưng:  Kích thước hay độ dài danh sách: số phần tử danh sách Kích thước danh sách rỗng    Chú ý kích thước danh sách không cố định mà biến đổi q trình xử lý, thao tác đại lượng mà ta thường trước Kiểu liệu phần tử: có kiểu liệu cho phần tử danh sách Kiểu liệu cho phần tử luôn cố định Trật tự tuyến tính danh sách: danh sách ln có hai phía, phía quy ước đầu, cịn phía danh sách Trật tự trước-sau trật tự từ đầu đến cuối Giới thiệu – Các thao tác danh sách  Khởi tạo danh sách    Định cấu trúc danh sách, xác định đặc trưng danh sách Sau thao tác khởi tạo, ta thường thu danh sách rỗng (danh sách chưa có nội dung, mà có phần khung) Trong ngơn ngữ lập trình, thao tác khởi tạo thường việc khai báo cấu trúc lưu trữ thích hợp để biểu diễn cho cấu trúc danh sách yêu cầu Giới thiệu – Các thao tác danh sách  Bổ sung phần tử vào danh sách   Trước tiên cần phải xác định vị trí danh sách mà phần tử đưa vào Thơng thường, vị trí bổ sung thường đầu hay cuối danh sách Tuy nhiên, ta chèn phần tử vào danh sách  Mỗi thao tác bổ sung làm tăng kích thước danh sách lên  Chú ý, điều kiện trước tiên (hay tiền điều kiện) để thực thao tác bổ sung danh sách chưa “đầy” hay chưa bão hoà Giới thiệu – Các thao tác danh sách  Loại bỏ phần tử khỏi danh sách     Đây thao tác ngược lại thao tác bổ sung Việc loại bỏ làm giảm kích thước danh sách Chú ý điều kiện trước tiên để loại bỏ phần tử danh sách phải không rỗng, tức phải cịn phần tử Nói chung, việc xác định trạng thái rỗng danh sách cơng việc đơn giản, trạng thái danh sách sau thao tác khởi tạo Giới thiệu – Các thao tác danh sách     Tìm kiếm phần tử danh sách: tìm kiếm xuất hay không hay số phần tử danh sách theo điều kiện tìm kiếm, xuất vị trí danh sách Thao tác tìm kiếm thường đơi với thao tác bổ sung loại bỏ Chúng ta dành chương “các giải thuật tìm kiếm” để nói thao tác Sắp xếp danh sách: thao tác xếp phần tử danh sách theo trật tự định Các giải thuật xếp trình bầy chi tiết chương “Các giải thuật xếp” Nối hai hay nhiều danh sách để thành danh sách Tách danh sách thành hai hay nhiều danh sách Giới thiệu – Các cấu trúc danh sách thông dụng   Cấu trúc vào sau trước (Last In, First Out LIFO) hay cấu trúc ngăn xếp – Stack Cấu trúc vào trước trước (First In, First Out - FIFO) hay cấu trúc hàng đợi – Queue Giới thiệu – Các cấu trúc danh sách thơng dụng  Cấu trúc hàng đợi có ưu tiên - Priority queue    Ở phần tử có thêm thuộc tính gọi độ ưu tiên Với phần tử có độ ưu tiên danh sách hoạt động giống nguyên tắc hàng đợi Khi có hai phần tử có độ ưu tiên khác danh sách ln ưu tiên phần tử có độ ưu tiên cao hơn, nên dù phần tử có độ ưu tiên cao có bổ sung vào sau phần tử có độ ưu tiên thấp loại bỏ trước Có thể nói cấu trúc kết hợp hai nguyên tắc hoạt động ngăn xếp hàng đợi không ưu tiên Giới thiệu – Các phương pháp cài đặt   Cài đặt cấu trúc lưu trữ (hay mảng chiều): cách cài đặt đơn giản nhanh Tuy nhiên, cách cài đặt có số hạn chế khác cấu trúc danh sách cấu trúc mảng, bên cấu trúc động, bên cấu trúc tĩnh Cài đặt cấu trúc lưu trữ móc nối: cấu trúc lưu trữ động với kích thước tổ chức lưu trữ biến đổi linh hoạt theo yêu cầu cấu trúc liệu, nên thích hợp để tổ chức lưu trữ cấu trúc liệu động Nguyên tắc chung  Khi sử dụng CTLT để cài đặt cho cấu trúc liệu, phải lưu ý số nguyên tắc sau:  Tính đầy đủ: CTLT phải có đặc trưng thích hợp để biểu diễn đầy đủ đặc tính khả CTDL Nó thể hai khía cạnh     Khả lưu trữ: kích thước CTLT cài đặt Đại lượng định miền giá trị cấu trúc liệu mà cài đặt Việc cài đặt cấu trúc liệu kiểu số nguyên ví dụ sinh động nguyên tắc cài đặt Khả xử lý: cụ thể hoá tập thao tác cài đặt CTLT chọn Tính mở Tính che dấu Cài đặt danh sách cấu trúc lưu trữ  Nguyên tắc chung:   Chọn cấu trúc lưu trữ phù hợp Bố trí hợp lý phần tử danh sách CTLT chọn Cài đặt danh sách cấu trúc lưu trữ  Nguyên tắc chung:  Chọn cấu trúc lưu trữ phù hợp    Xác định kích thước tối đa MAX danh sách Xác định kiểu liệu cho phần tử danh sách Chọn CTLT mảng chiều kích thước kiểu liệu chọn Cài đặt danh sách cấu trúc lưu trữ  Nguyên tắc chung:  Bố trí hợp lý phần tử danh sách CTLT chọn theo số nguyên tắc:     Bố trí phần tử ngăn nhớ Bố trí phần tử theo trật tự tuyến tính chúng Bố trí phần tử vị trí kề để đảm bảo số thông tin cần quản lý danh sách Chọn cách bố trí thích hợp để thao tác thực danh sách hiệu Cài đặt danh sách cấu trúc lưu trữ Một số cách bố trí phần tử danh sách mảng  a) b) Bố trí liền từ đầu mảng H=1, R=n, cần thơng tin n Bố trí dãy liên tục, cần hai ba thông tin H, R, n a1 a2 a3 … H=1 an-1 H a2 MAX R=n a) a1 an … b) an-1 an R MAX Cấu trúc LIFO (Stack)  Mô tả: cấu trúc vào sau trước (Last In, First Out - LIFO) hay cấu trúc ngăn xếp – Stack Đỉnh (top) Thứ tự bổ sung 5 Thứ tự loại bỏ Đáy (bottom) Cấu tạo hoạt động Stack Cài đặt Stack cấu trúc lưu trữ  Nguyên tắc cài đặt a1 a2 MAX … … … aT-1 aT loại bỏ B=1 (Đáy) bổ sung T (Đỉnh) Biểu diễn ngăn xếp CTLT typedef struct { Type info [MAX]; unsigned int n; } Stack;     //Số phần tử Stack CTLT thể qua mảng info, Type kiểu liệu danh sách n số phần tử ngăn xếp Đỉnh ngăn xếp vị trí n-1 typedef struct { Type info [MAX]; unsigned int n; } Stack;  //Số phần tử Stack Trạng thái thời ngăn xếp:    Rỗng (empty): n=0 Đầy (full): thông thường, giá trị MAX kích thước tối đa ngăn xếp (nếu xác định xác) kích thước tối đa mà CTLT cho phép, nên ta quy ước ngăn xếp đầy n=MAX Bình thường (normal): trạng thái không rỗng mà không đầy Khi ngăn xếp trạng thái này, thực thao tác bổ sung loại bỏ  Các thao tác bản: void Initialize (Stack & S){ S.n =0; } bool IsEmpty (Stack S){ if (S.n == 0) return true; else return false; } bool IsFull (Stack S){ if (S.n == MAX) return true; else return false; }  Các thao tác bản: //Bổ sung phần tử K vào đỉnh ngăn xếp void Push (Type K, Stack & S){ if (IsFull(S)) return; S.info[S.n] = K; S.n++; } //Lấy phần tử đỉnh ngăn xếp Type Pop (Stack & S){ if (IsEmpty(S)) return NULL; S.n ; return S.info[S.n]; }  Các thao tác bản: //Trả phần tử đỉnh ngăn xếp (khơng lấy phần tử ra) Type Top (Stack S){ if (IsEmpty(S)) return NULL; return S.info[S.n - 1]; } Bài tập    Bài 9.1: Cài đặt cấu trúc FIFO (Queue) cấu trúc lưu trữ Bài 9.2: Cài đặt danh sách tổng quát CTLT (với danh sách tổng quát, việc bổ sung lấy phần tử thực vị trí danh sách) Bài 9.3: Viết chương trình chuyển đổi số từ số 10 sang số 2, mà có sử dụng cấu trúc Stack Thank you! ... cấu trúc danh sách cấu trúc mảng, bên cấu trúc động, bên cấu trúc tĩnh Cài đặt cấu trúc lưu trữ móc nối: cấu trúc lưu trữ động với kích thước tổ chức lưu trữ biến đổi linh hoạt theo yêu cầu cấu. .. thiệu – Các cấu trúc danh sách thông dụng   Cấu trúc vào sau trước (Last In, First Out LIFO) hay cấu trúc ngăn xếp – Stack Cấu trúc vào trước trước (First In, First Out - FIFO) hay cấu trúc hàng... Bài 9. 1: Cài đặt cấu trúc FIFO (Queue) cấu trúc lưu trữ Bài 9. 2: Cài đặt danh sách tổng quát CTLT (với danh sách tổng quát, việc bổ sung lấy phần tử thực vị trí danh sách) Bài 9. 3: Viết chương

Ngày đăng: 27/03/2014, 11:56

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan