1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu 1: Chương 3B - Huỳnh Cao Thế Cường

26 16 0

Đ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

Cấu trúc

  • CẤU TRÚC DỮ LIỆU 1

  • Chương 3. CẤU TRÚC DỮ LIỆU ĐỘNG

  • Khái niệm danh sách

  • Các phép toán trên danh sách

  • Các phép toán trên danh sách

  • Slide 6

  • Các hình thức tổ chức danh sách

  • Slide 8

  • Cài đặt danh sách bằng mảng (DS đặc)

  • Cài đặt danh sách bằng mảng (tt)

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

  • Slide 21

  • Slide 22

  • Slide 23

  • Slide 24

  • Slide 25

  • PowerPoint Presentation

Nội dung

Trong chương này người học có thể nắm bắt được những kiến thức sau: Khái niệm danh sách, các phép toán trên danh sách, các hình thức tổ chức danh sách, cài đặt danh sách bằng mảng (DS đặc). Mời các bạn cùng tham khảo.

TRƯỜNG ĐẠI HỌC AN GIANG KHOA KỸ THUẬT- CÔNG NGHỆ - MÔI TRƯỜNG CẤU TRÚC DỮ LIỆU Giảng viên phụ trách: HUỲNH CAO THẾ CƯỜNG Bộ môn Tin học email: hctcuong@agu.edu.vn 1 Chương CẤU TRÚC DỮ LIỆU ĐỘNG Đặt vấn đề Kiểu liệu Con trỏ Danh sách liên kết (link list) Danh sách đơn Tổ chức danh sách đơn theo cách cấp phát liên kết Một số cấu trúc liệu dạng danh sách liên kết khác  Danh sách liên kết kép  Hàng đợi hai đầu (double-ended queue)  Danh sách liên kết có thứ tự (odered list)  Danh sách liên kết vòng  Danh sách có nhiều mối liên kết  Danh sách tổng quát Khái niệm danh sách Khái niệm danh sách  Mơ hình tốn học danh sách tập hợp hữu hạn phần tử có kiểu, tổng quát gọi kiểu phần tử (ElementType)  Ta biểu diễn danh sách chuỗi phần tử nó: a1, a2, , an với n ≥ • Nếu n=0 ta nói danh sách rỗng (empty list) • Số phần tử DS gọi độ dài danh sách  Một tính chất quan trọng danh sách phần tử danh sách có thứ tự tuyến tính theo vị trí (position) xuất phần tử Các phép toán danh sách  INSERT_LIST(x,p,L): xen phần tử x (kiểu ElementType) vào vị trí p (kiểu position) danh sách L  LOCATE(x,L): thực việc định vị phần tử có nội dung x danh sách L Nếu x khơng có danh sách vị trí sau phần tử cuối danh sách trả về, tức ENDLIST(L)  RETRIEVE(p,L): lấy giá trị phần tử vị trí p (kiểu position) danh sách L Các phép toán danh sách DELETE_LIST(p,L): thực việc xoá phần tử vị trí p (kiểu position) danh sách NEXT(p,L): cho kết vị trí phần tử sau phần tử p; p phần tử cuối danh sách L NEXT(p,L) cho kết ENDLIST(L) PREVIOUS(p, L): cho kết vị trí phần tử đứng trước phần tử p danh sách Các phép toán danh sách FIRST(L): cho kết vị trí phần tử danh sách EMPTY_LIST(L): cho kết TRUE danh sách rỗng, ngược lại cho giá trị FALSE MAKENULL_LIST(L): khởi tạo danh sách rỗng Các hình thức tổ chức danh sách Mối liên hệ phần tử ngầm hiểu  Mỗi phần tử có số ngầm hiểu ai+1 nằm sau Do phần tử phải nằm cạnh nhớ  Số lượng phần tử cố định Khơng có thao tác thêm hủy mà có thao tác dời chỗ  Truy xuất ngẫu nhiên đến phần tử nhanh chóng  Phí nhớ khơng biết trước kích thước  Ví dụ: mảng chiều Các hình thức tổ chức danh sách Mối liên hệ phần tử rõ ràng  Mỗi phần tử ngồi thơng tin thân cịn có thêm liên kết (địa chỉ) đến phần tử  Các phần tử không cần phải xếp cạnh nhớ  Việc truy xuất đến phần tử địi hỏi phải thơng qua phần tử khác  Tùy nhu cầu, phần tử liên kết theo nhiều cách khác tạo thành danh sách liên kết đơn, kép, vòng Cài đặt danh sách mảng (DS đặc) Ta cài đặt danh sách mảng sau: dùng mảng để lưu giữ liên tiếp phần tử danh sách từ vị trí mảng Cài đặt danh sách mảng (tt) #define MaxLength //Số nguyên thích hợp để độ dài danh sách typedef ElementType; //kiểu phần tử danh sách typedef int Position; //kiểu vị trí cuả phần tử typedef struct { ElementType Elements[MaxLength]; //mảng chứa phần tử danh sách Position Last; //giữ độ dài danh sách } List; 10 Cài đặt danh sách mảng (tt) Kiểm tra danh sách rỗng  Danh sách rỗng danh sách mà độ dài int IsEmpty_List(List L) { return L.Last==0; } 12 Cài đặt danh sách mảng (tt)  Chèn phần tử có nội dung x vào vị trí p danh sách có trường hợp sau:  Mảng đầy  Ngược lại ta tiếp tục xét:  Nếu p không hợp lệ ( p>last+1 pLast==MaxLength) printf("Danh sach day"); else if ((PL->Last+1)) printf("Vi tri khong hop le"); else { Position Q; /*Dời phần tử từ vị trí p (chỉ số mảng p-1) đến cuối danh sách sang phải vị trí*/ } for(Q=(L->Last-1)+1;Q>P-1;Q ) L->Elements[Q]=L->Elements[Q-1]; L->Elements[P-1]=X; //Đưa x vào vị trí p L->Last++; //Tăng độ dài danh sách lên } 16 Cài đặt danh sách mảng (tt) Xóa phần tử khỏi danh sách  Xố phần tử vị trí p khỏi danh sách L ta làm công việc ngược lại với xen  Trước tiên kiểm tra vị trí phần tử cần xóa xem có hợp lệ hay chưa? Nếu p>L.last pLast)) printf("Vi tri khong hop le"); else if (EmptyList(*L)) printf("Danh sach rong!"); else { Position Q; /*Dời phần tử từ vị trí p+1 (chỉ số mảng p) đến cuối danh sách sang trái vị trí*/ for(Q=P-1;QLast-1;Q++) L->Elements[Q]=L->Elements[Q+1]; L->Last ; }} 20 Cài đặt danh sách mảng (tt) Định vị phần tử danh sách  Để định vị vị trí phần tử có nội dung x danh sách L, ta tiến hành dị tìm từ đầu danh sách • Nếu tìm thấy x vị trí phần tử tìm thấy trả • Nếu khơng tìm thấy hàm trả vị trí sau vị trí phần tử cuối danh sách, tức ENDLIST(L) (ENDLIST(L)= L.Last+1) • Trong t/hợp có nhiều phần tử giá trị x danh sách vị trí phần tử tìm thấy trả 21 Cài đặt danh sách mảng (tt) Position Locate(ElementType X, List L) { Position P; int Found = 0; P = First(L); //vị trí phần tử /*trong chưa tìm thấy chưa kết thúc danh sách xét phần tử */ while ((P != EndList(L)) && (Found == 0)) if (Retrieve(P,L) == X) Found = 1; else P = Next(P, L); return P; } 22 Cài đặt danh sách mảng (tt) Lưu ý : Các phép toán sau phải thiết kế trước Locate  First(L)=1  Retrieve(P,L)=L.Elements[P-1]  EndList(L)=L.Last+1  Next(P,L)=P+1 23 Cài đặt danh sách mảng (tt) void main() { List L; ElementType X; Position P; Makenull_List(&L); //Khởi tạo danh sách rỗng Read_List(&L); printf(“\nDanh sach vua nhap: "); Print_List(L); // In danh sach len man hinh 24 Cài đặt danh sách mảng (tt) printf("Phan tu can them: ");scanf("%d",&X); printf("Vi tri can them: "); scanf("%d",&P); Insert_List(X,P,&L); printf("DS sau themla: "); Print_List(L); printf(“Phan tu can xoa: ");scanf("%d",&X); P=Locate(X,L); Delete_List(P,&L); printf("Danh sach sau xoa %d la: ",X); Print_List(L); } 25 .. .Chương CẤU TRÚC DỮ LIỆU ĐỘNG Đặt vấn đề Kiểu liệu Con trỏ Danh sách liên kết (link list) Danh sách đơn Tổ chức danh sách đơn theo cách cấp phát liên kết Một số cấu trúc liệu dạng... đến cuối danh sách sang phải vị trí*/ } for(Q=(L->Last-1)+1;Q>P-1;Q ) L->Elements[Q]=L->Elements[Q-1]; L->Elements[P-1]=X; //Đưa x vào vị trí p L->Last++; //Tăng độ dài danh sách lên } 16 Cài... trí p+1 (chỉ số mảng p) đến cuối danh sách sang trái vị trí*/ for(Q=P-1;QLast-1;Q++) L->Elements[Q]=L->Elements[Q+1]; L->Last ; }} 20 Cài đặt danh sách mảng (tt) Định vị phần tử danh sách

Ngày đăng: 11/05/2021, 00:51

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN