Bài giảng cấu trúc dữ liệu và giải thuật danh sách liên kết đơn

38 544 2
Bài giảng cấu trúc dữ liệu và giải thuật   danh sách liên kết đơn

Đ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 DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải NỘIMaster DUNGTitle Style Click To Edit DANH SÁCH LIÊN KẾT ĐƠN (LIST) Tổ Click Chức Của DSLKMaster Đơn To Edit CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải x0 x1 x2 Title Style x3  Mỗi phần tử liên kết với phần tử đứng liền sau danh sách  Mỗi phần tử danh sách liên kết đơn cấu trúc có hai thành phần  Thành phần liệu: Lưu trữ thông tin thân phần tử  Thành phần liên kết: Lưu địa phần tử đứng sau danh sách NULL phần tử cuối danh sách DSLKTitle đơnStyle Click CTDL To Edit Master  Cấu trúc liệu nút List đơn typedef struct tagNode { Data Info; // Lưu thông tin thân struct tagNode *pNext; //Lưu địa Node đứng CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải sau }Node; pNext  Cấu trúc liệu DSLK đơn Info typedef struct tagList { Node *pHead;//Lưu địa Node List Node *pTail; //Lưu địa Node cuối List }LIST; // kiểu danh sách liên kết đơn Ví dụ tổ chức DSLKMaster đơn nhớ Click To Edit Title Style pHead pTail 4f 3f CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải 4f 5f 5f NULL Trong ví dụ thành phần liệu số nguyên nodes f ∅ elements CácClick thao tác bảnMaster DSLK đơn To Edit Title Style  Tạo danh sách liên kết đơn rỗng  Tạo nút có trường Infor x  Tìm phần tử có Info x CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải  Thêm phần tử có khóa x vào danh sách  Hủy phần tử danh sách  Duyệt danh sách  Sắp xếp danh sách liên kết đơn Khởi tạo danh sáchMaster liên kết Click To Edit Title Style  Địa nút đầu tiên, địa nút cuối CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải void CreateList(List &l) { l.pHead=NULL; l.pTail=NULL; } TạoClick phần TotửEdit Master Title Style  Hàm trả địa phần tử tạo Node* CreateNode(Data x) { Node *p; CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải p = new Node;//Cấp phát vùng nhớ cho phần tử if ( p==NULL) exit(1); p ->Info = x; //gán dữa liệu cho nút p->pNext = NULL; return p; } Thêm phần tử vàoMaster DSLK Click To Edit Title Style  Các vị trí cần thêm phần tử vào List: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải  Thêm vào đầu List đơn  Thêm vào cuối List  Thêm vào sau phần tử q list Thuật toánTo thêm phần tử vào đầuStyle DSLK Click Edit Master Title  Thêm nút p vào đầu danh sách liên kết đơn Bắt đầu: Nếu List rỗng CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải + pHead = p; + pTail = pHead; Ngược lại + p->pNext = pHead; + pHead = p CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Hàm thêmTo phần vào đầuTitle List Click EdittửMaster void AddHead(LIST &l, Node* p) { if (l.pHead==NULL) { l.pHead = p; l.pTail = l.pHead; } else { p->pNext = l.pHead; l.pHead = p; } } Style Minh họa thuật toánMaster Click To Edit q CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải pHead 1f 2f p=q->pNext 2f 4f 3f Title Style p 3f 4f 4f q->pNext=p->pNext … Thuật toánTo hủy phần tử có khoá Click Edit Master Titlex Style Bước 1: Tìm phần tử p có khoá x, q đứng trước p Bước 2: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Nếu (p!=NULL) //tìm thấy phần tử có khoá x Hủy p khỏi List cách hủy phần tử đứng sau q Ngược lại Báo không tìm thấy phần tử có khoá CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CàiClick đặt thuật To toán Edit Master Title Style int RemoveX(List &l, int x) { Node *p,*q = NULL; p=l.Head; while((p!=NULL)&&(p->Info!=x)) //tìm { q=p; p=p->Next; } if(p==NULL) //không tìm thấy phần tử có khoá x return 0; if(q!=NULL)//tìm thấy phần tử có khoá x DeleteAfterQ(l,q,x); else //phần tử cần xoá nằm đầu List RemoveHead(l,x); return 1; } TìmClick phần trongMaster DSLK đơn TotửEdit Title Style  Tìm (hàm trả về), bước thuật toán tìm nút có Info x list đơn Bước 1: p=pHead;// địa phần tử đầu list đơn CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Bước 2: Trong p!=NULL p->Info!=x p=p->pNext;// xét phần tử kế Bước 3: + Nếu p!=NULL p lưu địa nút có Info = x + Ngược lại : Không có phần tử cần tìm Hàm tìm 1To phần tử Master DSLK đơn Click Edit Title Style  Hàm tìm phần tử có Info = x, hàm trả địa nút có Info = x, ngược lại hàm trả NULL Node *Search(LIST l, Data x) CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải { Node *p; p = l.pHead; while((p!= NULL)&&(p->Info != x)) p = p->pNext; return p; } Minh họa thuật toánMaster tìm phầnTitle tử DSLK Click To Edit Style CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải pHead 1f 34 2f 3f 4f 5f 56 P X = Tìm thấy, hàm trả địa nút tìm thấy 4f Duyệt danh Click Tosách Edit Master Title Style CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải  Duyệt danh sách thao tác thường thực có nhu cầu cần xử lý phần tử danh sách như:  Đếm phần tử danh sách  Tìm tất phần tử danh sách thảo điều kiện  Hủy toàn danh sách Thuật toánTo duyệt sách Title Click Editdanh Master Style • Bước 1: p = pHead;// p lưu địa phần tử đầu List CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải • Bước 2: Trong (danh sách chưa hết) thực + xử lý phần tử p + p=p->pNext;// qua phần tử kế CàiClick đặt in To Edit phần Master tử List Title void PrintList(List l) { Node *p; CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải p=l.pHead; while(p!=NULL) { printf(“%d p=p->pNext; } } ”, p->Info); Style HủyClick danh To sách liên Master kết đơn Edit Title Style  Bước 1: Trong (danh sách chưa hết) thực • B11: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải p = pHead; pHead = pHead->pNext;// cập nhật pHead • B12: Hủy p  Bước 2: pTail = NULL;// bảo toàn tính quán xâu rỗng CàiClick đặt thuật To toán Edit Master Title Style void RemoveList(List &l) { Node *p; CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải while(l.pHead!=NULL)//còn phần tử List { p = l.pHead; l.pHead = p->pNext; delete p; } } Minh họa thuật toánMaster Click To Edit Title Style pHead CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải 1f 2f p pTail 2f 3f 3f 4f 4f 5f 5f N CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Dùng xâu To đơnEdit để quản lý lớpTitle học Click Master Style  Yêu cầu: Thông tin sinh viên gồm, mã số sinh viên, tên sinh viên, điểm trung bình Hãy khai báo cấu trúc liệu dạng danh sách liên kết để lưu danh sách sinh viên nói Nhập danh sách sinh viên, thêm sinh viên vào đầu danh sách (việc nhập kết thúc tên sinh viên rỗng) Tìm sinh viên có lớp học hay không Xoá sinh viên có mã số x (x nhập từ bàn phím) Liệt kê thông tin sinh viên có điểm trung bình lớn hay CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Dùng xâu To đơnEdit để quản lý lớpTitle học Click Master Style Xếp loại in thông tin sinh viên, biết cách xếp loại sau: ĐTB =50 ĐTB=6.5 ĐTB < 7.0: Loại trung bình ĐTB>=7.0 ĐTB =8.0 ĐTB < 9.0: Loại giỏi ĐTB>=9.0 : Loại xuất sắc Sắp xếp in danh sách sinh viên tăng theo điểm trung bình Chèn sinh viên vào danh sách sinh viên tăng theo điểm trung bình nói trên, cho sau chèn danh sách sinh viên tăng theo điểm trung bình vv CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CấuClick trúc choMaster toánTitle Toliệu Edit • Cấu trúc liệu sinh viên typedef struct { char tên[40]; char Maso[40]; float ĐTB; }SV • Cấu trúc liệu nút xâu typedef struct tagNode { SV Info; struct tagNode *pNext; }Node; Style [...]... liệu và thuật giải pTail=P pTail->pNext 9f 6N P Thuật toán p vào Title sau phần Click Tophần Edit tử Master Styletử q  Ta cần thêm nút p vào sau nút q trong list đơn Bắt đầu: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Nếu (q!=NULL) thì B1: p->pNext = q->pNext B2: + q->pNext = p + nếu q = pTail thì pTail=p CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải CàiClick đặt thuật. .. List Title void PrintList(List l) { Node *p; CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải p=l.pHead; while(p!=NULL) { printf(“%d p=p->pNext; } } ”, p->Info); Style HủyClick danh To sách liên Master kết đơn Edit Title Style  Bước 1: Trong khi (danh sách chưa hết) thực hiện • B11: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải p = pHead; pHead = pHead->pNext;// cập nhật...Minh họa thuật toánMaster thêm vào đầu Style Click To Edit Title pHead 2f 3 3f CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải 9f pHead=P 10 P 2f N P->pNext=pHead 3f 4 4f 4f 8… Thuật toán thêm vào Title cuối Style DSLK Click To Edit Master  Ta cần thêm nút p vào cuối list đơn Bắt đầu: Nếu List rỗng thì CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải + pHead = p;... return 0;} Minh họa thuật toánMaster Click To Edit q CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải pHead 1f 7 2f p=q->pNext 2f 4f 6 3f Title Style p 3f 4f 3 4f q->pNext=p->pNext 8 … Thuật toánTo hủy phần tử có khoá Click Edit Master Titlex Style Bước 1: Tìm phần tử p có khoá bằng x, và q đứng trước p Bước 2: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Nếu (p!=NULL)... AddHead(l,q);// thêm q vào đầu list } Minh họa thuật Title toán Style Click To Edit Master 3f CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải 4 4f 4f q 8 5f 9f q->pNext=P 5f 9f 7 N 5f P 5 P->pNext=q->pNext HủyClick phần To tử trong đơnTitle Edit DSLK Master Style  Nguyên tắc: Phải cô lập phần tử cần hủy trước hủy  Các vị trị cần hủy CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải  Hủy... đặt thuật To toán Edit Master Title Style void RemoveList(List &l) { Node *p; CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải while(l.pHead!=NULL)//còn phần tử trong List { p = l.pHead; l.pHead = p->pNext; delete p; } } Minh họa thuật toánMaster Click To Edit Title Style pHead CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải 1f 7 2f p pTail 2f 6 3f 3f 4f 3 4f 5f 8 5f 9 N CẤU... N CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Dùng xâu To đơnEdit để quản lý lớpTitle học Click Master Style  Yêu cầu: Thông tin của một sinh viên gồm, mã số sinh viên, tên sinh viên, điểm trung bình 1 Hãy khai báo cấu trúc dữ liệu dạng danh sách liên kết để lưu danh sách sinh viên nói trên 2 Nhập danh sách các sinh viên, và thêm từng sinh viên vào đầu danh sách (việc nhập kết thúc... VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải pHead 1f 34 2f 3 3f 4 4f 5f 8 56 P X = 8 Tìm thấy, hàm trả về địa chỉ của nút tìm thấy là 4f Duyệt danh Click Tosách Edit Master Title Style CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải  Duyệt danh sách là thao tác thường được thực hiện khi có nhu cầu cần xử lý các phần tử trong danh sách như:  Đếm các phần tử trong danh sách  Tìm tất... To Edit Title Style pHead=pHead->pNext CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải pHead 2f 1f 7 2f P=pHead P 3f 6 3f 4f 3 4f 8 … HủyClick phần To tử sau tử q trong Editphần Master TitleList Style  Bắt đầu Nếu (q!=NULL) thì //q tồn tại trong List  B1: p=q->pNext;// p là phần tử cần hủy CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải  B2: Nếu (p!=NULL) thì // q không... pTail=p CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Hàm thêmTo 1 phần vào cuốiTitle DSLKD Click EdittửMaster Style void AddTail(LIST &l, Node *p) { if (l.pHead==NULL) { l.pHead = p; l.pTail = l.pHead; } else { l.pTail->Next = p; l.pTail = p; } } Minh họa thuật toánMaster thêm vào cuốiStyle Click To Edit Title 3f 4 4f 4f 8 5f pTail 5f 5 N 9f CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu

Ngày đăng: 03/05/2016, 21:35

Mục lục

  • NỘI DUNG

  • Tổ Chức Của DSLK Đơn

  • CTDL của DSLK đơn

  • Ví dụ tổ chức DSLK đơn trong bộ nhớ

  • Các thao tác cơ bản trên DSLK đơn

  • Khởi tạo danh sách liên kết

  • Tạo 1 phần tử mới

  • Thêm 1 phần tử vào DSLK

  • Thuật toán thêm 1 phần tử vào đầu DSLK

  • Hàm thêm 1 phần tử vào đầu List

  • Minh họa thuật toán thêm vào đầu

  • Thuật toán thêm vào cuối DSLK

  • Hàm thêm 1 phần tử vào cuối DSLKD

  • Minh họa thuật toán thêm vào cuối

  • Thuật toán phần tử p vào sau phần tử q

  • Cài đặt thuật toán

  • Minh họa thuật toán

  • Hủy phần tử trong DSLK đơn

  • Thuật toán hủy phần tử trong DSLK

  • Slide 20

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

Tài liệu liên quan