Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
560,5 KB
Nội dung
Chủ đề : DANH SÁCH LIÊN KẾT GVHD: Thầy TRẦN HỮU QUỐC THƯ Thực hiện : VÕ MINH THÔNG HỒ THỊ HỒNG VÂN NGUYỄN TRẦN CẨM THÚY ? Danh sách liên kết là tập hợp các phần tử được nối kết với nhau theo trình tự tuyến tính và trên đó có các thao tác tìm kiếm ,thêm bớt loại bỏ ,sắp xếp …. ():Các loại danh sách liên kết : A B YX Z Danh sách liên kết kép : Mỗi phần tử liên kết với phần tử đứng trước và sau nó trong danh sách: Danh sách liên kết đơn : Mõi phần tử liên kết với một phần tử đứng trước nó trong danh sách: A B X Y Z Danh sách liên kết vòng: Phần cuối danh sách liên kết với phần tử đầu danh sách : A B C X Y A B X Y Z Vòng đơn Vòng kép Cấu trúc dữ liệu của một phần tử trong danh sách đơn Mỗi phần tử trong danh sách đơn là một cấu trúc chứa hai thông tin -Thành phần dữ liệu : lưu trữ các thông tin về bản thân phần tử -Thành phần mối liên kết : lưu trữ địa chỉ của thành phần tử kết tiếp trong danh sách hoặc lưu trữ giá trị NULL nếu là phần tử cuối danh sách . Bằng ngôn ngữ C++ ta có thể định nghĩa danh sách liên kết như sau : struct Node { int info; Node *pNext; }; Node * p;Node *pHead; • Mỗi phần tử trong danh sách là một biến động được cấp phát hay hủy bỏ theo yêu cầu .Danh sách đơn liên kết các biến động này lại với nhau một cách linh động khi thay đổi số lượng các phần tử Nếu biết được địa chỉ của một phần tử đầu tiên trong danh sách đơn thì có thể dựa vào thông tin pNext của nó để truy xuất đến phần tử thứ hai trong danh xâu và lại dựa vào thông tin Next của phần tử thứ hai để truy xuất đến phần tử thứ 3 …. Nghĩa là để quản lý một xâu đơn thì cần biết địa chỉ của đầu xâu thường một con trỏ Head sẽ được dùng để lưu địa chỉ phần tử đầu xâu ta gọi Head đầu xâu được khai báo như sau NODE*pHead; Về nguyên tắt quản lý thì chỉ cần biết phần tử đầu xâu pHead nhưng thực tế có nhiều trường hợp cần làm với phần tử cuối xâu và như vây để tránh phải xác định phần tử cuối xâu bằng cách duyệt từ dầu xâu có thể sử dụng thêm một con trỏ pTail giữ địa chỉ phần tử cuối xâu qua khai báo sau : NODE *pTail khi đó ta được một danh sách đơn A B YX Z pTail pHead Các thao tác với danh sách: //khoi tao danh sach void init_list() { pHead = NULL; } //tao mot nut co gia tri la X Node * GetNode(int x) { Node * pNew = new Node; pNew->info=x; pNew->pNext=NULL; return pNew; } Thuật tóan : Bước 1 : Nếu danh sách rỗng thì B1.1: pHead=pNew B1.2:pTail=pHead; Ngược lại : B2.1:pNew=pNext=pHead B2.2 pHead =pNew [...]... nhất là tạo một danh sách mới từ danh sách củ và có thứ tự ( và hủy danh sách củ) Ví dụ : dùng phương án 2 cho thuật toán chọnt trực tiếp giả sử danh sách mới sẽ được quản lý bằng con trỏ đầu xâu RESULTthực hiện như sau B 1 Khởi tạo danh danh sách mới result là rỗng B 2 Tìm danh sác củ 1 phần tử nhỏ nhất quản lý bởi con trỏ min B 3 Tách min khoi danh sach B 4 Chèn min vào cuối danh sách result B 5... p=pHead // cho p trỏ đến phần tử đầu danh sách Bước 2 trong khi p!=NULL// chưa hết danh sách B2.1 xử lý phần tử p B2.2 p=p->pNext // cho p trỏ tới phần tử kế Riêng hủy tòan bộ danh sách có sự thay đổi trong thủ tục duyệt ( xử lý ) danh sách trên do có một thao tác hủy phần tử và khi đó phải cập nhật các liên kết liên quan Bước 1 trong khi pHead!=NULL // chưa hết danh sách B1.1 p=pHead pHead=pHead->pNext... p=p->pNext; return p; } //xuat danh sach lien ket void print_list() { Node * p=pHead; while(p!=NULL) { coutpNext=pHead; pHead=p; } Z Thuật tóan: Bắt dầu Nếu danh sách rỗng B1.1 pHead=pNew B1.2 pTail = pHead Ngược lại ; B2.1 pTail->pNext=pNew B2.2 pTail = pNew Thêm phần tử vào cuối danh sách : pTail pHead A B X Y //them mot phan tu vao cuoi danh sach void add_last(int... phần dữ liện ( data info ) của phẩn tử trong xâu có kích thước lớn thì có thể dùng một cách khác đó là thay vì hoán đổi giá tri info ,ta sẽ tìm cách thay đổi trình tự móc nối của các phần tử để thi t lập được thứ tự mong muốn cách này chỉ cho phép thao tác trên các móc nối ( trường pNext) Tuy nhiên các thao tác trên các móc nối sẽ phức tạp hơn là thao tác trực tiếp trên dữ liệu và vì vậy nếu dữ liệu. .. trỏ đến pHead Xóa p sau một phần tử đứng sau phần tử q : p q A B - X Y //xoa sau phan tu x trong danh sach int del(int x) { Node * p=find(x); if(p!=NULL && p->pNext!=NULL) { Node * q=p->pNext; p->pNext=q->pNext; delete q; return 0; } return -1; } pTail Z Xoá phần tử cuối danh sách: //xoa vi tri cuoi cua danh sach int del_last() { if(pHead==NULL) return -1; else if(pHead->pNext==NULL) del_first(); else... phần tử cần hủy B2 B2.1 pHeqad=pHead->pNext; // tách p ra khỏi xâu B2.2 Delete (p) //hủy biến động do p trỏ đến B3 Nếu pHead =NULL thì pTail =NULL ;// xâu rỗng Xoá phần tử đầu danh sách: pTail pHead - A B X Y //xoa vi tri dau cua danhsach int del_first() { if(pHead!=NULL) { Node *p=pHead; pHead=pHead->pNext; delete p; return 0; } return -1; } Z Thuật toán Nếu q!=NULL thì B1 p=q->pNext // p là phần tử... trong những phương án sắp xếp đã biết như chọn trực tiếp ,merge sort ,bubble sort… Để cài đặt trên xâu với lưu ý về sự khác biệt duy nhất là cách thức truy xuất đến các phần tử trên xâu thông qua các liên kết thay vì dùng chỉ số như trên mảng Khi đó do việc hoán vị nội dung các phần tử phải sử dụng thêm vùng nhớ trung gian nên chỉ thích hợp với các xâu có các phần tử có các thành phần info kích thứơc... tạo danh danh sách mới result là rỗng B 2 Tìm danh sác củ 1 phần tử nhỏ nhất quản lý bởi con trỏ min B 3 Tách min khoi danh sach B 4 Chèn min vào cuối danh sách result B 5 Lặp lại bước 2 khi chưa hêt danh sách . ():Các loại danh sách liên kết : A B YX Z Danh sách liên kết kép : Mỗi phần tử liên kết với phần tử đứng trước và sau nó trong danh sách: Danh sách liên kết đơn : Mõi phần tử liên kết với một. trong danh sách: A B X Y Z Danh sách liên kết vòng: Phần cuối danh sách liên kết với phần tử đầu danh sách : A B C X Y A B X Y Z Vòng đơn Vòng kép Cấu trúc dữ liệu của một phần tử trong danh. Chủ đề : DANH SÁCH LIÊN KẾT GVHD: Thầy TRẦN HỮU QUỐC THƯ Thực hiện : VÕ MINH THÔNG HỒ THỊ HỒNG VÂN NGUYỄN TRẦN CẨM THÚY ? Danh sách liên kết là tập hợp các phần tử được nối kết với