Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
427 KB
Nội dung
CHƯƠNG 3 DANH SÁCH TUYẾN TÍNH 2/59 NỘI DUNG Khái niệm danh sách tuyến tính Lưu trữ kế tiếp của danh sách tuyến tính Danh sách móc nối Ngăn xếp Hàng đợi 3/59 3.1 KHÁI NIỆM DANH SÁCH TUYẾN TÍNH Danh sách là một dãy các phần tử thuộc cùng một lớp đối tượng nào đó gọi là kiểu phần tử Ví dụ : Danh sách số nguyên, danh sách sinh viên, Trong danh sách mối quan hệ lân cận giữa các phần tử được thể hiện gọi là danh sách tuyến tính. Danh sách tuyến tính hoặc rỗng hoặc có dạng L = { a 1 , a 2 , , a n } 4/59 3.1 KHÁI NIỆM DANH SÁCH TUYẾN TÍNH Danh sách tuyến tính hoặc rỗng hoặc có dạng L = { a 1 , a 2 , , a n } Trong đó n gọi là độ dài hoặc kích thước của danh sách L n>0 thì a 1 là phần tử đầu danh sách, a n là phần tử cuối danh sách a i là phần tử thứ i trong danh sách với (1<=i<=n) a i được gọi là đứng trước a i+1 với (1<=i<n) a i được gọi là đứng sau a i-1 với (1<i<=n) 5/59 3.1 KHÁI NIỆM DANH SÁCH TUYẾN TÍNH Định nghĩa các phép toán tác động vào danh sách Khởi tạo danh sách rỗng (creat) Kiểm tra danh sách rỗng (empty) Kiểm tra danh sách đầy (full) Bổ sung một phần tử vào danh sách (insert) Loại bỏ một phần tử khỏi danh sách (del) Sắp xếp danh sách (sort) Tìm kiếm trên danh sách (search) Tách danh sách hoặc ghép danh sách 6/59 3.2 LƯU TRỮ KẾ TIẾP CỦA DSTT Khái niệm Định nghĩa và khai báo CTDL Định nghĩa các phép toán và chương trình thực hiện các phép toán cơ bản 7/59 3.2.1 Khái niệm Sử dụng mảng một chiều làm cấu trúc lưu trữ danh sách Mỗi phần tử của mảng lưu trữ một phần tử của danh sách, các phần tử của danh sách nằm kế tiếp nhau trong bộ nhớ Ưu điểm Truy cập trực tiếp tới các phần tử Các thao tác được thực hiện khá đơn giản Nhược điểm Do kích thước mảng cố định khi khai báo nên có thể dẫn đến sự lãng phí hoặc thiếu bộ nhớ. Phải dãn hoặc dồn danh sách khi chèn thêm hoặc loại bỏ phần tử khỏi danh sách 8/59 3.2.2 Định nghĩa và khai báo CTDL Giả sử các phần tử của danh sách có kiểu dữ liệu là <kiểu phần tử> Độ dài của danh sách là một số nguyên dương n Danh sách được biểu diễn bởi một bản ghi gồm có hai trường Trường thứ nhất: Là một số nguyên biểu diễn số phần tử có trong danh sách Trường thứ hai : Là mảng một chiều có kích thước đủ lớn để lưu các phần tử của danh sách 9/59 3.2.2 Định nghĩa và khai báo CTDL Khai báo cấu trúc dữ liệu : const max = <1 số thích hợp>; struct list { int sopt ; <kiểu phần tử> ptu[max] ; } l ; l.sopt = 0 -> danh sách l rỗng l.sopt = max -> ds đầy Danh s¸ch Cha cã 0 a 1 1 a 2 n - 1 a n . . . . . . . . max - 1 Mảng lưu trữ danh sách l 10/59 3.2.3 Các phép toán cơ bản Khởi tạo danh sách rỗng (creat) Kiểm tra danh sách rỗng (empty) Kiểm tra danh sách đầy (full) Bổ sung một phần tử vào danh sách (insert) Loại bỏ một phần tử khỏi danh sách (del) [...]... trong danh sách 21/59 Định nghĩa và khai báo CTDL Danh sách được định nghĩa là một con trỏ trỏ vào phần tử đầu tiên của danh sách a1 a2 … an NULL l Con trỏ next của phần tử cuối trong danh sách nhận giá trị NULL báo hiệu kết thúc danh sách 22/59 Định nghĩa và khai báo CTDL Khai báo cấu trúc như sau : struct node { ptu; node *next; } *l ; 23/59 Các phép toán cơ bản Khởi tạo danh sách. .. (creat) Kiểm tra danh sách rỗng (empty) Bổ sung một phần tử vào danh sách (insert) Loại bỏ một phần tử khỏi danh sách (del) 24/59 Các phép toán cơ bản Khởi tạo danh sách rỗng void { creat(node *&l) l = NULL; } 25/59 Các phép toán cơ bản Kiểm tra danh sách rỗng int empty(node *l) { return l==NULL; } 26/59 Các phép toán cơ bản Bổ sung phần tử x vào sau con trỏ p trong danh sách móc nối đơn... trỏ,trỏ vào nút đứng sau trong danh sách 33/59 Định nghĩa và khai báo CTDL Danh sách được định nghĩa là một con trỏ trỏ vào phần tử đầu tiên của danh sách l a1 a2 … an Con trỏ next của phần tử cuối trong danh sách thay vì nhận giá trị NULL lại trỏ vào phần tử đầu danh sách tạo ra mối nối vòng 34/59 Định nghĩa và khai báo CTDL Khai báo cấu trúc như sau : (Tương tự như danh sách móc nối đơn) struct node... +1]; } } 18/59 3.3 DANH SÁCH MÓC NỐI Danh sách móc nối đơn Danh sách móc nối vòng Danh sách móc nối kép Ưu nhược điểm của danh sách móc nối 19/59 3.3.1 Danh sách móc nối đơn Định nghĩa và khai báo CTDL Định nghĩa các phép toán và chương trình thực hiện các phép toán cơ bản 20/59 Định nghĩa và khai báo CTDL Mỗi phần tử của danh sách là một bản ghi gồm có 2 trường data next data chứa thông... Các phép toán cơ bản Khởi tạo danh sách rỗng void { creat(list &l) l.sopt = 0; } 11/59 3.2.3 Các phép toán cơ bản Kiểm tra danh sách rỗng int empty(list l) { return l.sopt ==0 ; } 12/59 3.2.3 Các phép toán cơ bản Kiểm tra danh sách đầy int full(list l) { return l.sopt ==max; } 13/59 3.2.3 Các phép toán cơ bản Phép bổ sung phần tử x vào vị trí thứ k trong danh sách l Bổ sung x=24 vào vị trí k=2... phép toán cơ bản Loại phần tử đứng sau con trỏ p trong danh sách móc nối đơn l void del(node *p, node *&l) { node *q=p->next; p->next = q->next; delete q; } 31/59 3.3.2 Danh sách móc nối vòng Định nghĩa và khai báo CTDL Định nghĩa các phép toán 32/59 Định nghĩa và khai báo CTDL (Tương tự như danh sách móc nối đơn) Mỗi phần tử của danh sách là một bản ghi gồm có 2 trường data next data chứa... k trong danh sách l Loại bỏ phần tử tại vị trí k=2 0 Mảng l.ptu 1 k=2 3 4 5 max = 7 14 23 42 11 25 l.sopt = 5 0 Mảng l.ptu 1 2 3 4 5 max = 7 14 23 11 25 l.sopt= 4 17/59 3.2.3 Các phép toán cơ bản Phép loại bỏ một phần tử khỏi danh sách void del(int k, list &l) { if (k>=0 && k < l.sopt) { l.sopt ; for (int i=k; iptu = x; q->next = p->next; p->next = q; } 28/59 Các phép toán cơ bản Bổ sung phần tử x vào cuối danh sách móc nối đơn l p a1 a2 … NULL l an x q 29/59 Các phép toán cơ bản Loại phần tử đứng sau con trỏ p trong danh sách móc nối đơn l a1 l a2 … an p 30/59 NULL... max = 7 42 11 25 l.sopt = 6 14/59 3.2.3 Các phép toán cơ bản Phép bổ sung một phần tử vào vị trí k trong danh sách l Bổ sung x=24 vào vị trí k=2 0 Mảng l.ptu 1 2 3 4 5 max = 7 14 23 24 42 11 25 l.sopt = 6 15/59 3.2.3 Các phép toán cơ bản Phép bổ sung một phần tử x vào vị trí k trong danh sách l void insert ( x, int k, list &l) { if (l.sopt =0 && k . CHƯƠNG 3 DANH SÁCH TUYẾN TÍNH 2/59 NỘI DUNG Khái niệm danh sách tuyến tính Lưu trữ kế tiếp của danh sách tuyến tính Danh sách móc nối Ngăn xếp Hàng đợi 3/59 3.1 KHÁI NIỆM DANH SÁCH. được thể hiện gọi là danh sách tuyến tính. Danh sách tuyến tính hoặc rỗng hoặc có dạng L = { a 1 , a 2 , , a n } 4/59 3.1 KHÁI NIỆM DANH SÁCH TUYẾN TÍNH Danh sách tuyến tính hoặc rỗng hoặc. (1<i<=n) 5/59 3.1 KHÁI NIỆM DANH SÁCH TUYẾN TÍNH Định nghĩa các phép toán tác động vào danh sách Khởi tạo danh sách rỗng (creat) Kiểm tra danh sách rỗng (empty) Kiểm tra danh sách đầy (full) Bổ