Please purchase a personal license.CHƯƠNG 3 (tiếp) - DANH SÁCH NỐI ĐƠN

34 353 0
Please purchase a personal license.CHƯƠNG 3 (tiếp) - DANH SÁCH NỐI ĐƠ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

Please purchase a personal license CHƯƠNG (tiếp) KHÁI NIỆM DANH SÁCH NỐI ĐƠN Nguyên tắc tạo thành danh sách Danh sách tạo thành từ phần tử gọi nút (Node) Các node nằm đâu nhớ Mỗi node cấu trúc gồm thành phần infor chứa thông tin phần tử danh sách L next trỏ, trỏ vào node đứng sau infor next A Một node danh sách KHÁI NIỆM DANH SÁCH NỐI ĐƠN Ví dụ next infor Tran Lan Anh 32 7.8 1089 Một node danh sách sinh viên 1089 địa vùng nhớ node đứng sau KHÁI NIỆM DANH SÁCH NỐI ĐƠN L Node Để truy nhập vào node danh sách ta phải từ node A Cần trỏ, trỏ vào node đầu danh sách B Phần tử cuối danh sách có next=NULL C L trỏ vào node danh sách Để truy xuất vào thông tin phần tử ta viết L->infor Để phần tử đứng sau ta viết L->next Giá trị NULL D E Danh sách nối đơn Ví dụ L=2038 2038 Vu Lan Anh 32 7.8 1089 1089 1547 Ta Bach Lan 23 8.7 1547 3452 3452 1032 Ha Anh Lan 23 8.7 Bui Nhu Lan 23 NULL 8.7 Vu Hoa Lan 23 8.7 1032 ƯU VÀ NHƯỢC ĐIỂM CỦA DSNĐ Ưu điểm: Tiết kiệm nhớ Các thao tác thêm xóa thực nhanh khơng phải dịch chuyển phần tử Nhược điểm: Việc truy xuất vào phần tử chậm ln phải xuất phát từ phần tử Chỉ duyệt danh sách theo chiều định, từ xuống Các thao tác phức tạp, khó hiểu với người LT KHAI BÁO CẤU TRÚC DỮ LIỆU Khai báo Cấu trúc liệu MẪU Khai báo kiểu liệu phần tử struct Item { Các thành phần liệu; Khai báo kiểu trỏ trỏ vào Node typedef Node * TRO; }; KB trỏ trỏ vào Node Khai báo kiểu liệu Node TRO L; struct Node { Item infor; Node *next; }; L=NULL -> ds L rỗng KHAI BÁO CẤU TRÚC DỮ LIỆU Khai báo Cấu trúc liệu sinh viên Khai báo kiểu liệu SV struct SINHVIEN { char hoten[30]; Khai báo kiểu liệu Node struct Node { SINHVIEN infor; int tuoi; float diemtb; }; Khai báo kiểu trỏ Node typedef Node * TRO; Node *next; }; KB trỏ trỏ vào Node TRO L; CÁC PHÉP TOÁN TRÊN DANH SÁCH Khởi tạo danh sách rỗng Kiểm tra danh sách rỗng Duyệt danh sách Tìm kiếm node danh sách Bổ sung node vào đầu danh sách Bổ sung node vào sau node Xóa node đầu danh sách Xóa node đứng sau node danh sách Sắp xếp danh sách CÁC PHÉP TOÁN TRÊN DANH SÁCH Khởi tạo danh sách rỗng Giá trị NULL void creat(TRO &L) { L = NULL; L } Danh sách nối đơn rỗng Kiểm tra danh sách rỗng int empty(TRO L) { return L == NULL; } XÓA NODE ĐẦU DANH SÁCH L Q Khai báo trỏ Q: TRO Q; A L Cho Q trỏ vào node đầu tiên: Q = L; B Chuyển L xuống node thứ 2: L = L->next; C Xóa node trỏ trỏ Q: delete Q; E F XĨA NODE ĐẦU DANH SÁCH Hàm xóa node đầu danh sách void First_Delete(TRO &L) { TRO Q; Q = L; L = L->next; delete Q; } XÓA NODE SAU NODE TRỎ BỞI M L Khai báo trỏ Q: TRO Q; A Cho Q trỏ vào node sau node trỏ M: Q = M->next; B next M trỏ vào node sau node trỏ Q: M->next = Q->next; Xóa node trỏ trỏ Q: delete Q; M Q C E F XÓA NODE SAU NODE TRỎ BỞI M Hàm xóa node sau trỏ M void M_Delete(TRO &L, TRO M) { TRO Q; Q = M->next; M->next = Q->next; delete Q; } TẠO MỘT DANH SÁCH MỚI Xuất phát từ danh sách rỗng: creat(L); Khai báo trỏ P, Q biến X: TRO P, Q; Item X; Nhập liệu cho biến X; Cấp phát nhớ cho trỏ P đưa liệu vào chỗ nhớ đó, đồng thời P->next=NULL; Nếu L=NULL L trỏ vào P Ngược lại next node trỏ Q trỏ vào node Cho Q trỏ vào node Nếu thỏa mãn điều kiện nhập tiếp lặp lại bước 2, ngược lại kết thúc P X A C B P L A Q B C TẠO MỘT DANH SÁCH MỚI Hàm tạo danh sách void input_List(TRO &L) { TRO P, Q; Item X; char tieptuc; //Bước L = NULL; do{ nhap(X); //Bước P = new Node; P->infor = X; P->next = NULL; //Bước if (L==NULL) L = P; //Bước else Q->next = P; Q = P; //Bước couttieptuc; }while (toupper(tieptuc) == ‘C’); //Bước } Bài tập Chương trình quản lý sinh viên (mã SV, họ tên, năm sinh, điểm tổng kết) danh sách nối đơn với chức Tạo danh sách Xác định chiều dài danh sách Hiển thị danh sách Tìm kiếm sinh viên theo mã hiển thị thơng tin sinh viên tìm thấy Xóa sinh viên biết mã Thêm sinh viên vào danh sách theo vị trí Sắp xếp danh sách theo chiều tăng dần DANH SÁCH NỐI VÒNG L Là danh sách nối đơn Có next node cuối trỏ vào node A DS nối vịng có ưu điểm xuất phát từ vị trí duyệt hết danh sách B Về cấu trúc liệu phép toán tương tự DS nối đơn Sinh viên tự nghiên cứu tài liệu C D E DANH SÁCH MÓC NỐI HAI CHIỀU Là danh sách móc nối mà node có ba thành phần infor prev B next Thành phần infor chứa liệu Con trỏ next trỏ vào node đứng sau Con trỏ prev trỏ vào node đứng trước DANH SÁCH MĨC NỐI HAI CHIỀU L1 Hình ảnh danh sách móc nối hai chiều Để quản lý danh sách nhớ người ta dùng hai trỏ Con trỏ L1 trỏ vào node đầu danh sách Con trỏ L2 trỏ vào node cuối danh sách L2 A B C D KHAI BÁO CẤU TRÚC DỮ LIỆU Khai báo Cấu trúc liệu MẪU Khai báo kiểu liệu phần tử struct Item { Các thành phần liệu; Khai báo kiểu trỏ trỏ vào Node typedef Node * TRO; }; KB trỏ trỏ vào Node Khai báo kiểu liệu Node node cuối TRO L1, L2; struct Node { Item infor; Node *next; Node *prev; }; L1/L2=NULL -> ds L rỗng CÁC PHÉP TOÁN TRÊN DANH SÁCH Khởi tạo danh sách rỗng Kiểm tra danh sách rỗng Duyệt danh sách Tìm kiếm node danh sách Bổ sung node vào đầu danh sách Bổ sung node vào trước/sau node Xóa node đầu danh sách Xóa node đứng trước/sau node danh sách Sắp xếp danh sách Bổ sung node vào đầu danh sách Trường hợp danh sách rỗng P L1 A L2 X A Bổ sung node vào đầu danh sách P L1 A X A B C D E L2 L1 Bổ sung node vào đầu danh sách Hàm bổ sung node vào đầu danh sách void first_Add(TRO &L1, TRO &L1, Item X) { TRO P; //Khai báo trỏ P P = new Node; P->infor = X; P->prev = NULL; P->next = L1; if (L2==NULL) //Trường hợp danh sách rỗng L2 = P; else L1->prev = P; L1 = P; } ... tử đứng sau ta viết L->next Giá trị NULL D E Danh sách nối đơn Ví dụ L=2 038 2 038 Vu Lan Anh 32 7.8 1089 1089 1547 Ta Bach Lan 23 8.7 1547 34 52 34 52 1 032 Ha Anh Lan 23 8.7 Bui Nhu Lan 23 NULL 8.7... TRÊN DANH SÁCH Khởi tạo danh sách rỗng Kiểm tra danh sách rỗng Duyệt danh sách Tìm kiếm node danh sách Bổ sung node vào đầu danh sách Bổ sung node vào sau node X? ?a node đầu danh sách X? ?a node... sau infor next A Một node danh sách KHÁI NIỆM DANH SÁCH NỐI ĐƠN Ví dụ next infor Tran Lan Anh 32 7.8 1089 Một node danh sách sinh viên 1089 đ? ?a vùng nhớ node đứng sau KHÁI NIỆM DANH SÁCH NỐI ĐƠN

Ngày đăng: 21/04/2016, 18:29

Từ khóa liên quan

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

Tài liệu liên quan