CẤU TRÚC DỮ LIỆU

103 12 0
CẤU TRÚC DỮ LIỆU

Đ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 DANH DANH SÁCH SÁCH (( LIST_ADT) LIST_ADT) Mục tiêu Sau học xong chương này, sinh viên: Hiểu cấu trúc liệu động Nắm vững kiểu liệu trừu tượng List-ADT  Cài đặt kiểu liệu ngơn ngữ lập trình cụ thể  Ứng dụng kiểu liệu trừu tượng toán thực tế Nội Dung  Cấu trúc liệu động  List-ADT  Cài đặt danh sách kề  Cài đặt danh sách liên kết đơn  Cài đặt danh sách liên kết kép Biến Tĩnh  Được khai báo tường minh, có tên gọi CẤU TRÚC DỮ LIỆU ĐỘNG  Tồn phạm vi khai báo  Được cấp phát stack  Kích thước khơng đổi => khơng tận dụng hiệu nhớ  Ví dụ : int x,y; char c; float f[5];  Khi biết nhu cầu sử dụng đối tượng trước thực xử lý : dùng biến khơng động Ví Dụ Hạn Chế Của Biến Tinh CẤU TRÚC DỮ LIỆU ĐỘNG  Tổ chức danh sách lớp học  Dùng mảng tĩnh : typedef struct { char ten[20]; int maso; }Hocvien; Hocvien danhsach[50];  Số lượng học viên lãng phí  Số lượng học viên > 50 => thiếu chỗ Biến Động CẤU TRÚC DỮ LIỆU ĐỘNG  Không khai báo tường minh, khơng có tên gọi  Xin cần, giải phóng sử dụng xong  Được cấp phát heap  Linh động kích thước  Vấn đề: biến động khơng có tên gọi tường minh, thao tác? CẤU TRÚC DỮ LIỆU ĐỘNG Kiểu trỏ  Kiểu trỏ dùng lưu địa đối tượng liệu khác  Biến thuộc kiểu trỏ Tp biến mà giá trị địa cuả vùng nhớ ứng với biến kiểu T, giá trị NULL  Khai báo C :  typedef int  intpointer *intpointer; p;  Bản thân biến trỏ không động  Dùng biến trỏ để lưu giữ địa biến động => truy xuất biến động thông qua biến trỏ CẤU TRÚC DỮ LIỆU ĐỘNG Các thao tác kiểu trỏ  Tạo biến động cho trỏ ‘p’ đến nó:  void* malloc(size);  void* calloc(n,size);  new // hàm cấp phát nhớ C++  Hủy biến động p đến :  Hàm free(p) huỷ vùng nhớ cấp phát hàm malloc calloc p trỏ tới  Hàm delete p huỷ vùng nhớ cấp phát hàm new p trỏ tới Sử dụng biến tinh, trỏ biến động Biến không động x CẤU TRÚC DỮ LIỆU ĐỘNG int x; x=5; int *p; Biến trỏ p 0xFF p = new(int); *p = 0xFF Biến động có địa 0xFF Kiểu danh sách  Danh sách = { phần tử có kiểu} CẤU TRÚC DỮ LIỆU ĐỘNG  Danh sách kiểu liệu tuyến tính:  Mỗi phần tử có nhiều phần tử đứng trước  Mỗi phần tử có nhiều phần tử đứng sau  Là kiểu liệu quen thuộc thực tế:  Danh sách học sinh  Danh mục sách thư viện  Danh bạ điện thoại  Danh sách nhân viên công ty  … 10 DANH SÁCH LIÊN KẾT KÉP Cài đặt tác vụ ds lk kép Tác vụ MakeNull_List: Khởi tạo ds lk kép void MakeNull_List(List *plist) { *plist = NULL; } Tác vụ Empty_List: Kiểm tra ds rỗng? int Empty_List(List *plist) { return *plist==NULL; } 89 DANH SÁCH LIÊN KẾT KÉP Cài đặt tác vụ ds lk kép Tác vụ listsize: Xác định số nút có ds lk kép int listsize(List *plist) { List p=*plist; int n=0; while(p!=NULL) { p=p->right; n++: } return n; } 90 DANH SÁCH LIÊN KẾT KÉP Cài đặt tác vụ ds lk kép Tác vụ nodepointer: Xác định trỏ nút thứ i (i=0, 1, …) List nodepointer(List *plist, int i) { List p=*plist; int vitri=0; while(p!=NULL && vitriright; vitri++: } return p; } 91 DANH SÁCH LIÊN KẾT KÉP Cài đặt tác vụ ds lk kép Tác vụ push: Thêm nút có nd x vào đầu ds lk void push(List *plist, int x) { List p; p=getnode(); p->info=x; if(*plist==NULL) //truong hop ds rong { p->left=NULL; p->right=NULL; *plist=p; } else { p->right=*plist; (*plist)->left=p; p->left=NULL; *plist = p; } } 92 Thêm Nút Vào Đầu Danh Sách • Minh họa hình vẽ DANH SÁCH LIÊN KẾT KÉP plist A B X 93 C D DANH SÁCH LIÊN KẾT KÉP Cài đặt tác vụ ds lk kép Tác vụ insertright: Thêm nút có nd x vào sau nút p void insertright(List p, int x) { List q,r; //q la nut can them, p truoc, r sau if(p==NULL) coutright; r->left=q; //tao lk giua r va q q->right=r; q->left=p; p->right=q; } } 94 Cài đặt tác vụ ds lk kép DANH SÁCH LIÊN KẾT KÉP  Minh họa thêm nút X vào sau nút p plist p r=p->right A B C q->left=p r->left=q p->right=q q->right=r X q 95 D DANH SÁCH LIÊN KẾT KÉP Cài đặt tác vụ ds lk kép Tác vụ insertleft Thêm nút có nd x vào trước nút p void insertleft(List p, int x) { List q,r; //q la nut can them, p sau, r truoc if(p==NULL) coutleft r->right=q; //tao lk giua r va q q->left=r; q->right=p; p->left=q; } } 96 Cài đặt tác vụ ds lk kép DANH SÁCH LIÊN KẾT KÉP  Minh hoạ thêm nút vào trước nút p plist p r=p->left A B C r->right=q q>right=p q->left=r p->left=q X q 97 D Cài đặt tác vụ ds lk kép DANH SÁCH LIÊN KẾT KÉP Tác vụ pop: Xóa nút đầu ds lk kép void pop(List *plist) { List p; if(empty(plist)) coutright; (*plist)->left=NULL; freenode(p); } } 98 Cài đặt tác vụ ds lk kép DANH SÁCH LIÊN KẾT KÉP Tác vụ delnode: Xóa nút p ds lk kép void delnode(List *plist, List p) { List q,r; if(p==NULL) coutright=r freenode(p); } } } 99 Cài đặt tác vụ ds lk kép DANH SÁCH LIÊN KẾT KÉP Tác vụ printright: duyệt xuôi ds lk kép void printright(List *plist) { List p; if(empty(plist)) cout

Ngày đăng: 11/10/2022, 01:20

Hình ảnh liên quan

Mơ hình - CẤU TRÚC DỮ LIỆU

h.

ình Xem tại trang 21 của tài liệu.
 Hình vẽ minh họa danh sách liên kết kép: - CẤU TRÚC DỮ LIỆU

Hình v.

ẽ minh họa danh sách liên kết kép: Xem tại trang 85 của tài liệu.

Mục lục

  • Ví Dụ Hạn Chế Của Biến Tinh

  • Các thao tác trên kiểu con trỏ

  • Sử dụng biến tinh, con trỏ và biến động

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

  • Danh sách liên kết ngầm (mảng)

  • Liên kết tuờng minh (Danh sánh liên kết)

  • Các loại danh sách liên kết

  • Các loại danh sách liên kết (tt)

  • Khái niệm về danh sách (List)

  • Các tác vụ (phép toán) trên danh sách

  • Cài đặt ds bằng mảng (ds đặc)

  • Khởi tạo ds rỗng

  • Kiểm tra ds rỗng

  • Xác định số nút trong ds

  • Kiểm tra ds đầy

  • Hàm trả về vị trí phần tử đầu tiên trong ds

  • Hàm trả về vị trí sau phần tử cuối cùng trong ds

  • Trả về nd nút tại vị trí p

  • Xen phần tử x vào vị trí p

  • Xóa phần tử tại vị trí p trong ds

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

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

Tài liệu liên quan