CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 3 (tiếp) DANH SÁCH NỐI ĐƠN pdf

34 1.9K 5
CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 3 (tiếp) DANH SÁCH NỐI ĐƠN pdf

Đ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

DANH SÁCH NỐI ĐƠN 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; } Danh sách nối đơn rỗng  Kiểm tra danh sách rỗng int empty(TRO L) { if (L==Null) Return 1; Else return 0; } L 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; } ... 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 Để... 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... 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

Ngày đăng: 29/03/2014, 00:20

Từ khóa liên quan

Mục lục

  • DANH SÁCH NỐI ĐƠN

  • KHÁI NIỆM DANH SÁCH NỐI ĐƠN

  • Slide 3

  • Slide 4

  • Slide 5

  • ƯU VÀ NHƯỢC ĐIỂM CỦA DSNĐ

  • KHAI BÁO CẤU TRÚC DỮ LIỆU

  • Slide 8

  • CÁC PHÉP TOÁN TRÊN DANH SÁCH

  • Slide 10

  • DUYỆT DANH SÁCH

  • Slide 12

  • TÌM KIẾM MỘT NODE TRÊN DANH SÁCH

  • Slide 14

  • Slide 15

  • BỔ SUNG VÀO ĐẦU DANH SÁCH

  • Slide 17

  • BỔ SUNG VÀO SAU MỘT NODE

  • Slide 19

  • XÓA NODE ĐẦU DANH SÁCH

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

Tài liệu liên quan