Chương 3 trang bị cho người học những kiến thức về cấu trúc dữ liệu động. Các nội dung chính được trình bày trong chương này gồm có: Con trỏ (Pointers), các phép tính về con trỏ, con trỏ và mảng, con trỏ dùng như mảng, con trỏ và cấu trúc, con trỏ vạn năng, con trỏ kép. | CẤU TRÚC DỮ LIỆU 1 Giảng viên phụ trách: HUỲNH CAO THẾ CƯỜNG Bộ môn Tin học email: hctcuong@ TRƯỜNG ĐẠI HỌC AN GIANG KHOA KỸ THUẬT- CÔNG NGHỆ - MÔI TRƯỜNG Chương 3. CẤU TRÚC DỮ LIỆU ĐỘNG Đặt vấn đề Kiểu dữ liệu Con trỏ Danh sách liên kết (link list) Danh sách đơn (xâu đơn) Tổ chức danh sách đơn theo cách cấp phát liên kết Một số cấu trúc dữ liệu dạng danh sách liên kết khác Danh sách liên kết kép Hàng đợi hai đầu (double-ended queue) Danh sách liên kết có thứ tự (odered list) Danh sách liên kết vòng Danh sách có nhiều mối liên kết Danh sách tổng quát Đặt vấn đề Biến không động (biến tĩnh, biến nửa tĩnh) Được khai báo tường minh Tồn tại trong phạm vi khai báo Được cấp phát vùng nhớ trong vùng dữ liệu (Data) hoặc là Stack Kích thước không thay đổi trong suốt quá trình sống Đặt vấn đề Biến động Biến không được khai báo tường minh Có thể cấp phát hay giải phóng bộ nhớ khi cần Vùng nhớ của biến được cấp phát trong Heap Kích thước có thể không thay đổi trong quá trình sống Con trỏ (Pointers) Khai báo: Dạng *Con trỏ char *c int *i; float *f; typedef int *intPointer; intPointer p; hoặc int *p; Ví dụ: Lập chương trình định nghĩa một số nguyên có giá trị bằng 1 và dùng một con trỏ p để chỉ số nguyên này. Sau đó in lên màn hình giá trị của số nguyên này bằng 2 cách Không dùng con trỏ Thông qua con trỏ Con trỏ (tt) #include void main() { int *p, n=1; printf("n=%d \n", n); p=&n; printf("n=%d \n", *p); //p } Kết quả: n=1; n=1; Con trỏ - Các phép tính về con trỏ void main() { char *a; char c[]="Pointers"; a=&c[0]; printf("c[1]=%c \n", *(a+1)); printf("Apter a+1, *a=%c \n", *a); a++; printf("Apter a+1, *a=%c \n", *a); } Kết quả: C[1]=o After a+1, *a=P After a++, *a=o Con trỏ - Các phép tính về con trỏ void main() { char *a; char c[]="Pointers"; int i; a=c; for(i=0; i<7; i++) printf("%c", *(a++)); printf("\n%c\n", *a); a=c; for(i=0; i<7; i++) printf("%c", *(++a)); printf("\n%c\n", *a); } Kết quả: Pointer s ointers s Con trỏ - Các phép tính về con trỏ Lưu ý: Ví | CẤU TRÚC DỮ LIỆU 1 Giảng viên phụ trách: HUỲNH CAO THẾ CƯỜNG Bộ môn Tin học email: hctcuong@ TRƯỜNG ĐẠI HỌC AN GIANG KHOA KỸ THUẬT- CÔNG NGHỆ - MÔI TRƯỜNG Chương 3. CẤU TRÚC DỮ LIỆU ĐỘNG Đặt vấn đề Kiểu dữ liệu Con trỏ Danh sách liên kết (link list) Danh sách đơn (xâu đơn) Tổ chức danh sách đơn theo cách cấp phát liên kết Một số cấu trúc dữ liệu dạng danh sách liên kết khác Danh sách liên kết kép Hàng đợi hai đầu (double-ended queue) Danh sách liên kết có thứ tự (odered list) Danh sách liên kết vòng Danh sách có nhiều mối liên kết Danh sách tổng quát Đặt vấn đề Biến không động (biến tĩnh, biến nửa tĩnh) Được khai báo tường minh Tồn tại trong phạm vi khai báo Được cấp phát vùng nhớ trong vùng dữ liệu (Data) hoặc là Stack Kích thước không thay đổi trong suốt quá trình sống Đặt vấn đề Biến động Biến không được khai báo tường minh Có thể cấp phát hay giải phóng bộ nhớ khi cần Vùng nhớ của biến được cấp phát trong Heap Kích thước có thể không thay đổi trong quá trình sống Con .