intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Cấu trúc dữ liệu: Chương 4 - Trịnh Xuân

Chia sẻ: Tằng Túy | Ngày: | Loại File: PDF | Số trang:8

50
lượt xem
2
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 4 cung cấp kiến thức về danh sách liên kết. Chương này gồm có những nội dung chính sau: Định nghĩa danh sách liên kết, danh sách liên kết đơn, danh sách liên kết kép. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Cấu trúc dữ liệu: Chương 4 - Trịnh Xuân

  1. I. Định nghĩa *Phân loại danh sách liên kết CHƯƠNG IV: •  Danh sách liên kết đơn: mỗi một phần tử của !  Danh sách liên kết là tập hợp các phần tử được liên kết móc DANH SÁCH nối liên tiếp với nhau, có kiểu truy cập tuần tự. Mỗi một phần tử là một nút (Node). danh sách liên kết duy nhất với một phần tử đứng sau nó. LIÊN KẾT !  Số phần tử là biến động !  Nút gồm hai phần: •  Danh sách liên kết kép: mỗi một phần tử của danh sách liên kết với cả phần tử đứng trước và –  Data - Dữ liệu: là các thành phần dữ liệu mà một nút đó lưu trữ đứng sau trong danh sách. –  Linked - Liên kết: là con trỏ kiểu nút đang định nghĩa được dùng để liên kết với các nút khác •  Danh sách liên kết vòng: là danh sách mà phần !  Ví dụ: tử cuối liên kết với phần tử đầu của danh sách. Có hai loại danh sách liên kết vòng: vòng đơn và vòng kép Data Data Data 14 Danh sách liên kết 22 Danh sách liên kết 23 Danh sách liên kết II. Danh sách liên kết đơn 1. Khai báo CTDL ! Cú pháp định nghĩa một nút: ! Cú pháp định nghĩa danh sách: ! Khai báo CTDL DSLK Đơn: struct – Định nghĩa cấu trúc một nút { struct LIST Info Next { – Định nghĩa cấu trúc danh sách Data info; //Khai báo dữ liệu - struct (Dữ liệu) (liên kết) Node Head; //Phần tử dầu danh sách ! Cấu trúc mỗi nút gồm: struct Node *next; //khai báo liên kết – Info: kiểu cấu trúc }; Node Tail; //Phần tử cuối danh sách – Next: kiểu con trỏ }; ! Cấu trúc danh sách LK đơn gồm: ! Trong đó: –  Head – Data: là kiểu dữ liệu đã được khai báo để mô tả thành LIST Q; //tạo danh sách có tên là Q –  Tail phần dữ liệu chứa trong nút, là kiểu được định nghĩa sẵn 24 Danh sách liên kết 25 Danh sách liên kết 26 Danh sách liên kết Ví dụ 2. Các thao các trên danh sách đơn struct SV MSV MSV ! Cho thông tin của Sinh viên gồm: mã sinh ! Các thao tác cơ bản sau: { hoten next hoten next viên, Họ tên, Điểm trung bình – Tạo danh sách dtb dtb int MSV; ! Khai báo CTDL dạng danh sách liên kết – Duyệt danh sách char hoten[25]; đơn để lưu được danh sách SV trên – Chèn phần tử float dtb; – Hủy phần tử }; struct LIST – Tìm kiếm phần tử struct Node { – Sắp xếp danh sách { Node Head; Node Tail; – … SV info; }; struct Node *next; }; 27 Danh sách liên kết 28 Danh sách liên kết 29 Danh sách liên kết
  2. a. Tạo danh sách: *ĐN thủ tục get_node để tạo nút mới với thành phần dữ liệu là x đã có: b. Chèn một phần tử mới vào danh sách: Node* get_node( Data x ) ! Để tạo danh sách, gồm các bước: { ! Các trường hợp sau – Khởi tạo danh sách rỗng Node *p; – Chèn vào đầu danh sách p = new Node; – Tạo nút mới chứa thông tin nào đó – Chèn vào cuối danh sách if ( p == NULL ) { – Chèn vào sau một phần tử q đã biết void init( List &Q ) printf(“Ko du bo nho”); exit(1); { } Q.Head = NULL; p -> info = x; p -> next = NULL; Q.Tail = NULL; return p; } } => Tạo phần tử mới: new_element = get_node(x); 30 Danh sách liên kết 31 Danh sách liên kết 32 Danh sách liên kết Chèn thêm phần tử mới vào đầu danh sách: Chèn thêm phần tử mới vào cuối danh sách: Q.Head Q.Tail Q.Head Q.Tail new_element new_element Thuật toán Thuật toán Q.Head 4f Nếu danh sách rỗng: Nếu danh sách rỗng 2f 3f Phần tử đầu là phần tử mới chèn vào Phần tử đầu là phần tử mới chèn vào 3 3f 4 4f 8… Phần tử cuối là phần tử đầu Phần tử cuối cũng là phần tử đầu 9f Ngược lại (danh sách khác rỗng): Ngược lại (danh sách khác rỗng) 10 2f Phần tử cuối trỏ tới phần tử mới chèn vào Phần tử mới trỏ tới phần tử đầu Q.Head = P P->Next = Q.Head Phần tử cuối là phần tử mới được chèn vào Phần tử đầu là phần tử mới được chèn vào P 33 Danh sách liên kết 34 Danh sách liên kết 35 Danh sách liên kết Chèn thêm phần tử mới sau phần tử q đã biết Q.Tai 3f 4f 5f l Thuật toán 3f 4f q 5f 4 4f 8 5f 5 9f N Nếu không có phần tử q " không chèn được Q.Tail=P Nếu có tồn tại phần tử q 4 4f 8 9f 5f 5 .. Q.Tail->Next -Phần tử mới móc tới phần tử sau phần tử q 9f 9f q->Next = P -Phần tử q móc tới phần tử mới 7 N 5f P->Next = q->Next 6N -Nếu phần tử q là phần tử cuối thì phần tử mới P chèn là phần tử cuối mới 36 8/4/16 PCTDL – Khoa CNTH Danh – Việnsách ĐH Mở liên HN kết 37 Danh sách liên kết 38 Danh sách liên kết
  3. B. Tìm kiếm phần tử k trong danh sách *Thuật toán Cài đặt: Node *Search( LIST Q, Data k ) # Ý tưởng: Danh sách đơn chỉ cho truy xuất tuần !  Bước 1: p = Q.Head; //p trỏ từ đầu danh { tự tới từng phần tử " Áp dụng thuật toán tìm sách Node *p; tuyến tính để xác định có phần tử k trong danh !  Bước 2: kiểm tra danh sách còn phần tử và chưa p = Q.Head; sách hay ko? tìm thấy phần tử thì chuyển sang phần tử tiếp theo # Để duyệt dùng một con trỏ p để duyệt qua các Lặp trong khi (p!=NULL) và (p->info !=k) thì while ( p != NULL ) nút của danh sách p = p -> next; { 4f 5f !  Bước 3: if ( p -> info ==k ) break; Q.Head 1f 2f 3f p = p -> next; 34 3 4 8 56 –  Nếu p != NULL: } !  Tìm thấy P Tìm thấy, hàm trả về !  p trỏ đến phần tử cần tìm X = 8 địa chỉ của nút tìm return p; thấy là 4f –  Ngược lại: ko tìm thấy (trả lại NULL) } 39 Danh sách liên kết 40 Danh sách liên kết 41 Danh sách liên kết Cài đặt: c. Duyệt danh sách Cài đặt Node *Search( LIST Q, Data k ) { ! Là kỹ thuật để xét qua được hết các phần void Duyet_DS ( LIST Q) Node *p; tử của danh sách { p = Q.Head; ! Thực hiện Node *p; – Khai báo một con trỏ p có kiểu Node p = Q.Head; while (( p != NULL ) && (p -> info !=k )) while ( p != NULL ) p = p -> next; – Cho con trỏ p duyệt từ đầu đến cuối để đi { qua từng phần tử của Danh sách return p; ! Thuật toán p = p -> next; } } } 42 Danh sách liên kết 43 Danh sách liên kết 44 Danh sách liên kết Ví dụ: d. Hủy một phần tử khỏi danh sách Hủy một phần tử đầu danh sách: # Các trường hợp Q.Tail ! Viết hàm in danh sách sinh viên ra màn Q.Head •  Hủy phần tử đầu hình •  Hủy phần tử đứng sau phần tử q xác định ! Viết hàm in họ tên của tsinh viên có điểm •  Hủy phần tử có giá trị xác định k trên 8 Thuật toán: ! Viết hàm cho biết Họ tên của Sv có ĐTB Nếu danh sách rỗng (không có phần tử đầu) => không thực hiện # Chú ý: khi tạo nút thì dùng hàm cấp phát bộ nhớ xóa được cao nhất => Khi hủy thì phải dùng hàm để giải phóng bộ Nếu có phần tử đầu nhớ. Lưu tạm thời phần tử đầu – lưu vào p Chuyển phần tử đầu sang phần tử tiếp theo Xóa phần tử đầu đã được lưu tạm – xóa p Kiểm tra: Nếu danh sách chỉ có một phần tử, khi xóa phần tử đi thì phần tử cuối cùng không còn 45 Danh sách liên kết 46 Danh sách liên kết 47 Danh sách liên kết
  4. Thuật toán: Hủy một phần tử đứng sau phần tử q: Q.Head = Q.Head->Next # Thuật toán 1f 3f 4f # Nếu có phần tử q p = q->Next Q.Head 2f q p $ Lưu phần tử đứng sau phần tử q – lưu vào p 7 2f 6 3f 3 4f 8 … Q.Head 1f 2f 3f 4f $ Nếu có phần tử p (q không phải là phần tử cuôi) 7 2f 6 3f 4f 3 4f 8 … $ Tách phần tử p ra khỏi danh sách P P = Q.Head $ Nối phần tử q với phần tử sau p $ Giải phóng phần tử p q->Next = p->Next 48 Danh sách liên kết 49 Danh sách liên kết 50 Danh sách liên kết Hủy một phần tử có khóa k * Cài đặt: int RemoveNode( LIST &Q, Data k ) if (q != NULL) ! Thuậttoán: { { ! Bước 1: NODE *p = Q.Head, *q = NULL; if(p == Q.Tail) Q.Tail = q; Tìm phần tử p có khóa k và phần tử q đứng trước while( p != NULL) q->next = p->next; ! Bước 2: { delete p; Nếu (p!= NULL) thì // tìm thấy k if (p->info == k) break; } q = p; else //p là phần tử đầu xâu Hủy p ra khỏi xâu tương tự hủy phần tử sau q; p = p->next; { Ngược lại Q.Head = p -> next; Báo không có k; } if ( Q.Head == NULL) Q.Tail = NULL; if (p == NULL) return 0; //Không tìm thấy k } return 1; } 51 Danh sách liên kết 52 Danh sách liên kết 53 Danh sách liên kết e. Sắp xếp danh sách Hoán vị nội dung của phần tử: Cài đặt sắp xếp danh sách bằng cách thay đổi nội dung: # Là thực hiện thay đổi trực tiếp thành phần infor void ListSortInterchange( LIST &Q ) ! Để sắp xếp có hai phương án: trong mỗi nút còn thứ tự liên kết của các nút là { Node *p, *q; //p và q la hai bien dieu khien – Hoán vị nội dung của phần tử không thay đổi Data tg; for(p = Q.Head;p != NULL; p = p->next) – Thay đổi mối liên kết của phần tử for(q = p -> next;q!=NULL; q = q->next ) Q.Head Q.Tail if ( p->info> q->info ) Hoandoi(p->info,q->info); 3f 4f 5f } 4 4f 7 5f 6 N Q.Head Q.Tail 3f 4f 5f 4 4f 6 5f 7 N 54 Danh sách liên kết 55 Danh sách liên kết 56 Danh sách liên kết
  5. Ví dụ Thay đổi mối liên kết void ListSortInterchange( LIST &Q ) ! Viếthàm sắp xếp danh sách sinh viên theo { ! Là thực hiện thay đổi trực tiếp thành phần thứ tự ĐTB tăng dần Node *p, *q; //p và q la hai bien dieu khien Next trong mỗi nút " thứ tự liên kết của Data tg; p = Q.Head; các nút là thay đổi while ( p != NULL ) { ! Ý tưởng: Tạo một danh sách mới là danh q = p -> next; while( q != NULL ) sách có thứ tự lần lượt lấy từ danh sách cũ { (đồng thời huỷ danh sách cũ ). if ( p->info.DTB > q->info.TDB ) { tg = p->info; p->info = q->info; q->info = tg; } q = q->next; } p = p->next; } } 57 Danh sách liên kết 58 Danh sách liên kết 59 Danh sách liên kết Bài tập thực hành Q.Head Q.Tail ! Thuật toán sắp xếp bằng thay đổi mối liên ! Cho thông tin của cán bộ gồm: mã cán bộ, họ tên, ngày 3f 4f 5f sinh, hệ số lương, phụ cấp và thành tiền (=hệ số lượng * 4 4f 7 5f 6 N kết : 1050000 + phụ cấp) – Bước 1: Khởi tạo danh sách mới Result là rỗng; ! Viết chương trình quản lý cán bộ dưới dạng DSLK đơn, – Bước 2: Tìm trong danh sách cũ Q (Head, Tail) với các yêu cầu: Q.Head Q.Tail phần tử min là phần tử nhỏ nhất; – Nhập vào danh sách cán bộ 3f 4f 5f 4 5f 7 N 6 4f – In lại ds cán bộ đã có – Bước 3: Tách min khỏi danh sách cũ Q (Head, – Hủy bỏ cán bộ đầu danh sách Tail); – Tìm kiếm cán bộ có mã là k – Bước 4: Chèn min vào cuối danh sách Result; Q.Head – Sắp xếp DSCB theo thứ tự tăng dần của thành tiền 3f 5f 4f Q.Tail – Bước 5: Lặp lại bước 2 khi chưa hết danh sách – Đếm số cán bộ có lương trên 4 triệu … 4 5f 6 4f 7 N cũ Q (Head, Tail); ! Áp dụng các yêu cầu trên 60 Danh sách liên kết 61 Danh sách liên kết 62 Danh sách liên kết Bài tập thực hành (y/c chi tiết) III. Danh sách liên kết kép Định nghĩa một nút trong danh sách ! Khai Báo CTDL DSLK đơn chứa DS Cán bộ gồm: MCB, Hoten, Tuoi, HSL, PC, TT(=HSL* 1.050.000 + PC) 1. Khai báo CTDL: !  struct DNode ! Mỗi Node gồm hai thành phần: ! Định nghĩa các CTC sau: { Nhập một cán bộ In một cán bộ Data infor; //Khai báo các thành phần dữ liệu Khởi tạo DSLK rỗng Tạo một nút chứa 1 cán bộ nào đó –  Data:là một cấu trúc để mô tả thông tin struct DNode *next; //khai báo liên kết sau struct DNode *previous; //khai báo liên kết trước Chèn thêm 1 cán bộ vào đầu DSLK đơn In DSCB được lưu trữ trong nút }; Tìm kiếm một CB có mã nào đó Tính tổng lương của các CB Đếm số CB có lương từ 2 đến 3 triệu SX DSCB tăng dần theo tổng lương –  Linked: gồm hai con trỏ để chỉ liên kết !  Định nghĩa danh sách struct DLIST Chèn thêm CB vào sau CB có mã là x với phần tử trước và phần tử sau trong { ! Áp dụng lần lượt các CTC trên dưới dạng menu lựa chọn: danh sách. DNode *Head; – 0. Thoát DNode *Tail; – 1. Tạo DSCB 2. In lại DSCB }; – 3. Tìm kiếm CB theo mã nào đó 4. Đếm số CB lương từ 2 đến 3 triệu Data Data Data DLIST DQ; //Tạo danh sách kép lấy tên là DQ – 5. Tính tổng lương của các cán bộ 6. … DNode *new_element; 63 Danh sách liên kết 64 Danh sách liên kết 65 Danh sách liên kết
  6. * Ví dụ: 2. Các thao các trên danh sách kép a. Tạo danh sách struct SV # Đối với danh sách kép có các thao tác cơ bản sau: { ! Gồm: struct DList •  Tạo danh sách int MSV; { – Khởi tạo danh sách rỗng char hoten[25]; •  Chèn một phần tử float dtb; DNode *Head; – Tạo nút chứa thông tin cần lưu trữ DNode *Tail; •  Hủy một phần tử }; struct DNode }; •  Tìm kiếm phần tử { •  Duyệt danh sách SV info; DList DQ; struct SV *next; •  Sắp xếp danh sách theo thành phần dữ liệu struct SV *previous; }; MSV MSV MSV previuos previuos previuos hoten next hoten next hoten next dtb dtb dtb 66 Danh sách liên kết 67 Danh sách liên kết 68 Danh sách liên kết Thủ tục tạo một nút mới Chèn thêm phần tử vào danh sách: DNode *Get_Node( Data x ) !  Các trường hợp: { DNode *p; –  Chèn mới vào đầu danh sách p = new DNode(); –  Chèn mới vào cuối danh sách if (p == NULL) –  Chèn mới vào sau một phần tử q đã biết { printf(”Ko du bo nho”); –  Chèn mới vào trước một phần tử q đã biết exit(1); } p -> infor = x; p -> next = NULL; p -> previous = NULL; return p; } 70 Danh sách liên kết 71 Danh sách liên kết 72 Danh sách liên kết Chèn thêm vào trước phần tử q: Cài đặt: Hủy một phần tử khỏi danh sách # Có các trường hợp: void AddBefore(DLIST &DQ, DNode *q, DNode *new_element) •  Hủy phần tử đầu { •  Hủy phần tử cuối DNode *p = q -> previous; if ( q != NULL ) •  Hủy phần tử đứng sau phần tử q { •  Hủy phần tử đứng trước phần tử q new_element -> next = q; •  Hủy một phần tử có khóa là k # Nếu phần tử q khác rỗng " có tồn tại phần tử q new_element -> previous = p; p = q -> previous //Tạo phần tử p đứng trước q q -> previous = new_element; if (p != NULL) p -> next = new_element -> next = q new_element; new_element -> previous = p if (q == DQ.Head) DQ.Head = q -> previous = new_element new_element; } 79 Danh sách liên kết 80 } Danh sách liên kết 81 Danh sách liên kết
  7. Hủy một phần tử đứng trước phần tử q: Cài đặt xóa phần tử đứng trước phần tử q DQ.Head DQ.Tail void RemoveBefore (DLIST &DQ, Dnode *q) A B C D { p q Dnode *p; DQ.Head DQ.Tail if ( q = = NULL ) MoveLast(DQ); else //Co phan tu q DQ.Head DQ.Tail { A B C D if (q = = DQ.Head) //Phần tử q là phần tử đầu A B C D { printf("\n Ko xoa duoc do dang o vi tri dau"); exit(1); } p = q -> previous; //lay phan tu can huy bo q p q -> previous = p -> previous; DQ.Head DQ.Tail if ( p = = DQ.Head ) DQ.Head = q; else p -> previous -> nex t = q; A B C D free(p); } } 82 Danh sách liên kết 89 Danh sách liên kết 90 Danh sách liên kết *Tìm kiếm phần tử có khóa xác định: e. Sắp xếp các phần tử của danh sách: Bài tập áp dụng void Sort_Inter(D_LIST &DQ) ! Cho thông tin của cán bộ gồm: mã cán bộ, họ tên, ngày ! danh sách kép có thể kết nối với phần { sinh, hệ số lương, phụ cấp và thành tiền (=hệ số lượng * tử trước và sau nên, thực hiện tìm Dnode *p,*q; p = DQ.Head; 1050000 + phụ cấp) kiếm bằng cách: q = p -> next; while (p!=NULL) ! Thực hiện các yêu cầu sau: – Áp dụng mảng Định nghĩa các thao tác sau: –  xuất phát từ đầu danh sách { q = p -> next; ! In lại toàn bộ danh sách cán bộ –  xuất phát từ cuối danh sách. while ( q != NULL) ! Tính tổng lương của toàn bộ các cán bộ { if ( p -> info > q -> info ) ! Đếm số CB có mức lương từ 2 triệu đến 3 triệu Hoandoi( p->info , q->info ); ! Tìm kiếm cán bộ có mã nào đó q = q -> next; } ! SX DSCB tăng dần theo tổng lương p = p -> next; – Viết chương trình thực hiện các chức năng trên } } 95 93 Danh sách liên kết 95 Danh sách liên kết 96 Danh sách liên kết Bài tập thực hành (y/c chi tiết) *Bài tập áp dụng Cài đặt chương trình ! Khai Báo CTDL DSLK chứa Cán bộ gồm: MCB, Hoten, Tuoi, HSL, !  Thông tin về nhân viên gồm: mã số nhân viên, họ tên, ngày ! Cho thông tin của Nhân viên gồm: mã nhân viên, họ tên, tuổi, PC, TT(=HSL* 1.050.000 + PC) sinh, tổng lương. HSL, PC (Luong = (HSL+PC)*1050000) ! Định nghĩa các CTC sau: !  Thực hiện các yêu cầu sau: ! Cài đặt CT bằng ngôn ngữ C để quản lý DSNV dưới dạng Nhập một cán bộ Tính tổng lương của các CB SX DSCB tăng dần theo tổng lương – a. Khai báo CTDL của DSLK đôi để quản lý DSNV DSLK Đơn với các yêu cầu sau: In một cán bộ – Tạo danh sách Nhập 1 DSCB In DS CB có tuổi dưới 20 – Thực hiện các thao tác trên danh sách In DSCB Cho biết Họ tên của CB có lương cao nhất – Chèn thêm vào danh sách một số phần tử (đầu và cuối) ! b. Thêm một nhân viên vào đầu danh sách liên kết kép Tìm kiếm một CB có mã nào đó Chèn thêm một cán bộ cvaof sau cán bộ có mã là x nào đó – Hiển thị lại toàn bộ danh sách trên. Đếm số CB có lương từ 2 đến 3 triệu – Hiển thị ds cán bộ có lương trên 2 triệu ! Áp dụng lần lượt các CTC trên dưới dạng menu lựa chọn: ! c. In lại toàn bộ danh sách nhân viên ra màn hình – Tìm kiếm một nhân viên theo mã nào đó –  0. Thoát ! d. Tính tổng lương của tất cả các nhân viên trong DS – Chèn thêm một nhân viên vào sau nhân viên q nào đó –  1. Tạo DSCB 2. In lại DSCB ! e. Hủy một nhân viên khỏi đầu danh sách – Tính tổng lương của các nhân viên –  3. Tìm kiếm CB theo mã nào đó 4. Đếm số CB lương từ 2 đến 3 triệu – Sắp xếp danh sách NV theo lương giảm dần –  5. Tính tổng lương của các cán bộ 6. … ! f. In danh sách nhân viên có mức lương cao nhất – … ! g. Sắp xếp DSNV theo tứ tự giảm dần của lương 98 ! Áp dụng chương trình bằng các menu lựa chọn 99 97 Danh sách liên kết 98 Danh sách liên kết 99 Danh sách liên kết
  8. Bài tập áp dụng Bài tập về nhà – 6/10/2014 Bài tập về nhà buổi 4 ! Cài đặt chương trình BTL dưới dạng DSLK với một số yêu cầu cơ ! Mỗi nhóm chọn ra một đối tượng cần quản lý của bài toán bản: – Tạo danh sách ! Cài đặt quản lý đối tượng đó bằng mảng, gồm tối thiểu: Đọc DS LK đơn Mỗi phần xác định: – Hiển thị toàn bộ danh sách – Nhập & in DS - Tìm kiếm – Chèn đầu – Tính tổng & tính tổng có điều kiện - Sắp xếp ! Khaibáo CTDL ! Ý tưởng – Xóa đầu – Đếm & đếm có điều kiện - Phần tử lớn nhất và nhỏ ! Khởi tạo danh sách ! Các bước – Tìm kiếm nhất ! Thêm phần tử ! Minh họa – Sắp xếp => Áp dụng các yêu cầu trên ! Nộp bài ! Yêu cầu nộp bài: ! Xóa ! Cài đặt – Hạn: Muộn nhất 20h -ngày 30/1/2013 – Mỗi nhóm nộp 1 bài, trong đầu chương trình ghi rõ thông tin ! Duyệt – Gửi mail: trinhxuan@gmail.com nhóm và bài toán của mình – subject: CTDL - CT6 - Họ tên sinh viên - Lớp ! Sắp xếp – Gửi mail: trinhxuan@gmail.com trước 17h – ngày – Đính kèm file 12/10/2014 ! File đặt theo nguyên tắc: Tên sinh viên_Lớp.CPP – Subject: CTDL – BTL – Mảng - 10 10 10 0 Danh sách liên kết 1 – Tên file: CTDL_ Danh sách liên kết 2 Danh sách liên kết Bài tập về nhà buổi 5 Bài tập về nhà buổi 6 Đọc DS LK kép Mỗi phần xác định: Đọc Stack - Queue ! Khaibáo CTDL ! Ý tưởng ! Stack ! Queue ! Khởi tạo danh sách ! Các bước – Địnhnghĩa – Địnhnghĩa ! Thêm phần tử ! Minh họa – Càiđặt – Càiđặt ! Xóa ! Cài đặt – Ứng dụng – Ứng dụng ! Duyệt ! Sắp xếp 10 10 3 Danh sách liên kết 4 Danh sách liên kết
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2