1. Trang chủ
  2. » Giáo án - Bài giảng

Tin học cơ sở 4 Struct

40 500 2

Đ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

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 590 KB

Nội dung

Tin Học Cơ Sở Kiểu liệu có cấu trúc Danh sách liên kết Nội Dung • Kiểu cấu trúc liệu struct – Khai báo sử dụng – Truyền tham số cho hàm • Các cách định nghĩa kiểu DL có cấu trúc • Danh sách liên kết Lê Nguyên Khôi Cấu Trúc • Kiểu liệu nhóm (tổng hợp) • Nhắc lại kiểu liệu nhóm: – Mảng: tập hợp liệu CÙNG kiểu – Cấu Trúc: tập hợp liệu KHÁC kiểu • Xử lý thực thể đơn, ví dụ: Mảng • Điểm khác biệt bản: – Phải định nghĩa kiểu cấu trúc struct trước khai báo biến kiểu Lê Nguyên Khôi Cấu Trúc – Ví Dụ • Kiểu cấu trúc liệu: – Thành phần khác kiểu – Các thành phần xác định trước • Ví dụ: Tên Trường Dữ Liệu Kiểu Dữ Liệu HoTen Trach Van Doanh char[] MSSV 1234567 int MonHoc INT1006 char* NgaySinh 01/01/1995 char* GioiTinh Nam int Lê Nguyên Khôi Dữ Liệu Kiểu Cấu Trúc • Cấu trúc: – Tập hợp biến, khác kiểu, nhóm vào thành tên đơn – Hỗ trợ tổ chức liệu phức tạp vào thực thể – Hỗ trợ làm việc liệu thực thể – Định nghĩa từ khóa struct – Đôi biết đến ghi Lê Nguyên Khôi Dữ Liệu Kiểu Cấu Trúc • Định nghĩa struct toàn cục – Ngoài/Trước int main() – Mục đích: tất hàm hiểu • Không cấp phát nhớ – Chỉ có mục đích miêu tả cấu trúc – Khác với mảng: cấp phát – Cấp phát nhớ cho biến kiểu cấu trúc (giống biến thông thường) • Cần byte cho biến kiểu cấu trúc? Lê Nguyên Khôi Dữ Liệu Kiểu Cấu Trúc • Để định nghĩa struct, cần cung cấp: – Tên struct • Ví dụ: struct sinhvien – Tên trường • Ví dụ: hoTen – Kiểu trường (có thể kiểu cấu trúc struct) • Ví dụ: char hoTen[30] Lê Nguyên Khôi Định Nghĩa struct • Định nghĩa kiểu liệu sử dụng struct struct sinhvien  tên kiểu liệu { char hoTen[30];  tên & kiểu trường int maSV; double diemTB; };  “;” sau “}” • Sau định nghĩa, kiểu liệu sử dụng kiểu liệu khác: –Biến kiểu gán cho biến khác có kiểu –Biến kiểu truyền cho hàm Lê Nguyên Khôi Khai Báo Biến Cấu Trúc • Sau định nghĩa kiểu cấu trúc, khai báo biến kiểu này: struct sinhvien sinhVien1; – Giống khai báo biến kiểu đơn khác – Biến sinhVien1 có kiểu struct sinhvien – Bao gồm giá trị thành phần • Giống thành phần định nghĩa struct sinhvien Lê Nguyên Khôi Truy Cập Thành Phần • Sử dụng toán tử chấm (.) để truy cập – sinhVien1.hoTen – sinhVien1.maSV – sinhVien1.diemTB • Gọi tên “biến thành phần" – Các phần biến kiểu cấu trúc – Kiểu cấu trúc struct khác có tên biến thành phần • Biến thành phần cục hay toàn cục? Lê Nguyên Khôi 10 Con Trỏ ĐẦ U • Hình hộp head nút: QuanBaiPtr head; – Là trỏ tới nút – Chỉ tới nút danh sách head sử dụng để lưu vị trí đầu danh sách • Đồng thời tham chiếu truyền cho hàm • Lê Nguyên Khôi 26 Truy Cập Nút • (*head).key = 12; – Gán trường key nút tới head giá trị 12 • Toán tử kết hợp, -> – “Toán tử mũi tên“ kết hợp * & – head->key = 12; • Giống ví dụ đầu • scanf(“%s” , head->ten); – Gán xâu nhập vào từ bàn phím cho trường ten Lê Nguyên Khôi 27 Dấu Kết Thúc • Sử dụng NULL để dánh dấu kết thúc – Ra hiệu không kết nối sau nút • Dấu kết thúc cho danh sách liên kết giống cho mảng không đầy Lê Nguyên Khôi 28 Dấu Kết Thúc head Lê Nguyên Khôi 29 Tạo Nút Đầ u Tiên • ListNodePtr head; – Khai báo biến trỏ head head = (ListNodePtr) malloc (sizeof(struct ListNode)); strcpy(head->ten, “nut dau tien”); head->key = 1; head->next = NULL; – Nút danh sách (head) – Cập nhật liệu cho nút – Kết nối tới NULL có nút Lê Nguyên Khôi 30 Thêm Một Nút Vào Sau head • Tạo nút newNode ListNodePtr newNode; newNode = (ListNodePtr) malloc (sizeof(struct ListNode)); strcpy(newNode->item, “nut moi”); newNode->key = 2; newNode->next = NULL; • Sau nối head với nút head->next = newNode; Lê Nguyên Khôi 31 Thêm Một Nút Vào Cuối Danh Sách Liên Kết • Như trước, tạo nút newNode • Tìm vị trí cuối danh sách, thêm newNode vào cuối danh sách liên kết ListNodePtr currentNode = head; while (currentNode->next != NULL) currentNode = currentNode-> next; currentNode->next = newNode; Lê Nguyên Khôi 32 Tìm Kiếm Trên Danh Sách Liên Kết • Hàm với tham số: ListNodePtr search(ListNodePtr head, int target); //Precondition: trỏ head vào nút đầu //danh sách liên kết Con trỏ nút cuối //chỉ tới NULL //Nếu danh sách trống, head NULL //Trả trỏ tới nút có giá trị //target Nếu không trả NULL • Duyệt danh sách đơn giản – Giống duyệt mảng Lê Nguyên Khôi 33 Mã Giả Cho Hàm Tìm Kiếm • while (chưa tới nút cuối || nút cần tìm) { cho trỏ tới nút } if (nếu nút tìm nút cần tìm) return nút tìm được; else return NULL; Lê Nguyên Khôi 34 Xóa Một Nút Từ Danh Sách Liên Kết • Tìm nút cần xóa delNode danh sách • Nếu delNode nút đầu, trỏ delNode đến phần tử sau nút đầu • Nếu không tạo kết nút trước với nút sau delNode (cần biến phụ để lưu nút trước) Lê Nguyên Khôi 35 Chèn Một Nút Vào Danh Sách Liên Kết • Tìm vị trí thích hợp để chèn nút insNode vào danh sách • Tạo kết nối cho insNode: – Chèn vào đầu – Chèn vào cuối – Chèn vào Lê Nguyên Khôi 36 Giới Thiệu Cấu Trúc Cây • Cây cấu trúc liệu phức tạp • Giới thiệu kiến thức bản: – Khởi tạo, Thao tác – Sử dụng nút & trỏ • Cấu trúc có từ trỏ cho nút Lê Nguyên Khôi 37 Cây Nhị Phân Lê Nguyên Khôi 38 Đặc Điểm Của Cấu Trúc Cây • Đường dẫn – Từ gốc tới – Không có vòng tròn • Mỗi nút có trỏ – Cây nhị phân – Phổ biến cấu trúc • Nút gốc – Giống nút đầu danh sách liên kết • Nút Lá – Cả hai trỏ tới NULL Lê Nguyên Khôi 39 Cây & Đệ Quy • Cây có cấu trúc đệ quy • Mỗi có nhánh – Mỗi nhánh có nhánh • …… • Cây xử lý thuật toán đệ quy – Ví dụ tìm kiếm Lê Nguyên Khôi 40 [...]... Có thể khởi tạo khi khai báo struct { int int int }; struct –Cung cấp phần ngay ngay ngay; thang; nam; ngay homNay = {1, 4, 20 14} ; dữ liệu ban đầu cho biến thành khi khai báo Lê Nguyên Khôi 11 Khởi Tạo Biến Cấu Trúc • Hoặc khai báo rồi khi cần mới khởi tạo struct ngay { int ngay; int thang; int nam; }; struct ngay homNay; homNay.ngay = 1; homNay.thang = 4; homNay.nam = 20 14; Lê Nguyên Khôi 12 Cấu Trúc... tạo các kiểu khác: typedef float Floating; • Các biến có thể được khai báo kiểu Floating nhưng thực sự các biến là kiểu float • Sau này, nếu cần đổi độ chính xác, chỉ cần đổi: typedef double Floating; Mà không cần phải thay đổi mã Lê Nguyên Khôi 17 Kết hợp struct & typedef struct sinhvien { char ten[30]; int maSV; struct ngay ngaysinh; double diemTB; }; typedef struct sinhvien SinhVien; SinhVien NguyenVanA;... Hình thành bởi các nút • Mỗi nút là một biến kiểu struct DanhSach – Nút chứa con trỏ chỉ đến các nút khác – Cung cấp kết nối Lê Nguyên Khôi 23 Định Nghĩa Nút struct quanbai { char *ten; int key; struct quanbai *next; }; typedef struct quanbai * QuanBaiPtr; • Chú ý thứ tự định nghĩa – struct quanbai định nghĩa trước, do sử dụng ở typedef Lê Nguyên Khôi 24 Nút & Con Trỏ head Lê Nguyên Khôi 25 Con Trỏ ĐẦ... kiểu trùng với tên struct với chữ cái đầu của các từ viết hoa Lê Nguyên Khôi 18 Truyền Cho Hàm • Kiểu dữ liệu kiểu struct có thể được truyền cho hàm • Truyền giống như các kiểu dữ liệu cơ bản – Truyền giá trị • Một bản sao của cả struct sẽ được tạo mới và được truyền cho hàm – Truyền địa chỉ: • Nếu hàm cần thay đổi dữ liệu hoặc muốn tránh nh ững hạn chế, có thể truyền con trỏ tới struct cho hàm Lê Nguyên... “.” được ưu tiên trước “*” • Nếu p là con trỏ trỏ tới cấu trúc struct x và a là một trường của cấu trúc đó: – *p.a tương đương *(p.a) không hợp lệ – Phải sử dụng (*p).a – Để thuận tiện, có thể dùng toán tử -> kết hợp con trỏ và trường – p->a tương đương (*p).a Lê Nguyên Khôi 15 Cấu Trúc & Con Trỏ struct ToaDo int x, y; }; struct ToaDo struct ToaDo ap = &a; *ap.x = 0; { a; *ap; /* /* (*ap).y = 0; /*... muốn tránh nh ững hạn chế, có thể truyền con trỏ tới struct cho hàm Lê Nguyên Khôi 19 Kiểu Tự Tham Chiếu • Một kỹ thuật lập trình mạnh dùng để tạo struct với các trường là tham chiếu tới một đối tượng có cùng kiểu struct Ví dụ: struct DanhSach { int data; struct DanhSach *next; }; • Cách định nghĩa này có thể tạo nên những cấu trúc dữ liệu rất hữu dụng Lê Nguyên Khôi 20 Danh Sách Liên Kết • Xem xét... kiểu cấu trúc struct: – So sánh bằng/khác (==, !=) (homQua == homNay biểu thức không hợp lệ) – So sánh thứ tự (, ) (homQua < homNay biểu thức không hợp lệ) – Các phép toán (homQua + homNay biểu thức không hợp lệ) – In & cập nhật (printf & scanf không hợp lệ) • Phải viết các phép toán này Lê Nguyên Khôi 14 Cấu Trúc & Con Trỏ • Giống các kiểu dữ liệu khác: – struct x * là con trỏ tới struct x – Toán... thang; int nam; }; struct ngay homNay; homNay.ngay = 1; homNay.thang = 4; homNay.nam = 20 14; Lê Nguyên Khôi 12 Cấu Trúc – Phép Gán • Với cấu trúc struct ngay như trước • Khai báo 2 biến cấu trúc: struct ngay homQua, homNay; – Cả 2 biến đều là kiểu cấu trúc ngay” struct – Phép gán đơn giản hợp lệ: homQua = homNay; • Sao chép các biến thành phần của homNay cho các biến thành phần của homQua • => Khác với... head head = (ListNodePtr) malloc (sizeof (struct ListNode)); strcpy(head->ten, “nut dau tien”); head->key = 1; head->next = NULL; – Nút đầu tiên của danh sách (head) – Cập nhật dữ liệu cho nút đầu tiên – Kết nối tới NULL do chỉ có 1 nút Lê Nguyên Khôi 30 Thêm Một Nút Vào Sau head • Tạo một nút mới newNode ListNodePtr newNode; newNode = (ListNodePtr) malloc (sizeof (struct ListNode)); strcpy(newNode->item,... Mã Giả Cho Hàm Tìm Kiếm • while (chưa chỉ tới nút cuối || nút cần tìm) { cho con trỏ chỉ tới nút tiếp theo } if (nếu nút tìm được là nút cần tìm) return nút tìm được; else return NULL; Lê Nguyên Khôi 34 Xóa Một Nút Từ Danh Sách Liên Kết • Tìm nút cần xóa delNode trong danh sách • Nếu delNode là nút đầu, chỉ con trỏ delNode đến phần tử tiếp theo sau nút đầu • Nếu không tạo kết nếu giữa nút trước với ... nghĩa struct, cần cung cấp: – Tên struct • Ví dụ: struct sinhvien – Tên trường • Ví dụ: hoTen – Kiểu trường (có thể kiểu cấu trúc struct) • Ví dụ: char hoTen[30] Lê Nguyên Khôi Định Nghĩa struct. .. homNay.thang = 4; homNay.nam = 20 14; Lê Nguyên Khôi 12 Cấu Trúc – Phép Gán • Với cấu trúc struct trước • Khai báo biến cấu trúc: struct homQua, homNay; – Cả biến kiểu cấu trúc ngay” struct – Phép... nam; homNay = {1, 4, 20 14} ; liệu ban đầu cho biến thành khai báo Lê Nguyên Khôi 11 Khởi Tạo Biến Cấu Trúc • Hoặc khai báo cần khởi tạo struct { int ngay; int thang; int nam; }; struct homNay; homNay.ngay

Ngày đăng: 03/04/2016, 21:54

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN