Chương 3: danh sách tuyến tính pptx

59 2.4K 22
Chương 3: danh sách tuyến tính pptx

Đ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 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 Cha 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ổ

Ngày đăng: 12/07/2014, 14:20

Mục lục

  • 3.1 KHÁI NIỆM DANH SÁCH TUYẾN TÍNH

  • 3.1 KHÁI NIỆM DANH SÁCH TUYẾN TÍNH

  • 3.2 LƯU TRỮ KẾ TIẾP CỦA DSTT

  • 3.2.2 Định nghĩa và khai báo CTDL

  • 3.2.3 Các phép toán cơ bản

  • 3.3 DANH SÁCH MÓC NỐI

  • 3.3.1 Danh sách móc nối đơn

  • Định nghĩa và khai báo CTDL

  • Các phép toán cơ bản

  • 3.3.2 Danh sách móc nối vòng

  • 3.3.3 Danh sách móc nối kép

  • Ưu nhược điểm của danh sách móc nối

  • BÀI TẬP ỨNG DỤNG

  • BÀI TẬP ÁP DỤNG

  • DANH SÁCH MÓC NỐI ĐƠN

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

Tài liệu liên quan