Bài giảng Cấu trúc dữ liệu 1: Chương 3A - Huỳnh Cao Thế Cường
Số trang: 22
Loại file: ppt
Dung lượng: 289.00 KB
Lượt xem: 13
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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.
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu 1: Chương 3A - Huỳnh Cao Thế Cường TRƯỜNGĐẠIHỌCANGIANGKHOAKỸTHUẬTCÔNGNGHỆMÔITRƯỜNG CẤUTRÚCDỮLIỆU1 Giảng viên phụ trách: HUỲNH CAO THẾ CƯỜNG Bộ môn Tin học email: hctcuong@agu.edu.vn 1 1 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ếtMộ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 2 Đặ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 3 Đặ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 4 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ỏ 5 Con trỏ (tt)#include void main(){ int *p, n=1; printf(n=%d , n); p=&n; printf(n=%d , *p); //p}Kết quả: n=1; n=1; 6 Con trỏ - Các phép tính về con trỏvoid main() Kếtquả:{ char *a; C[1]=o char c[]=Pointers; Aftera+1,*a=P a=&c[0]; Aftera++,*a=o printf(c[1]=%c , *(a+1)); printf(Apter a+1, *a=%c , *a); a++; printf(Apter a+1, *a=%c , *a);} 7 Con trỏ - Các phép tính về con trỏvoid main(){ char *a; Kếtquả: char c[]=Pointers; int i; Pointer a=c; s for(i=0; i Con trỏ - Các phép tính về con trỏLưu ý: Ví dụ: char *cp; int *ip; double *dp; Kết quả: giá trị con trỏ tăng lên bao nhiêu đơn vị? cp++ ip++ dp+=5 9 Con trỏ và mảngKhai báo: int *p; int a[4]={1,2,3,4}; p=&a[0]; p=a; print(a[2]=%d, *(p+2)); p=p+2; print(a[2]=%d, *p); hay p=a; print(a[2]=%d, *(p+=2)); 10 Con trỏ dùng như mảngint *p={1,2,3,4};print(%d, *(p+2));char *p=con tro;char *p[3]=[Fortran, Pascal, Lisp];Khi đó: p[0]; p[1]; p[2]; printf(%s, p[2]); 11 Con trỏ dùng như mảngVí dụ: Lập chương trình dùng con trỏ để định nghĩa mảng 3 dã chữ Fortral, Pascan, List. Sửa chúng thành Fortran, Pascal, Lisp và dùng printf để kiểm tra kết quả. 12 Con trỏ dùng như mảnginclude ;void main(){ char *p[3]=[Fortral, Pascan, List]; *(p[0]+6)=n; *(p[1]+5)=l; *(p[2]+3)=p; printf(%s %s %s , p[0], p[1], p[2]);} 13 Con trỏ dùng như mảngVí dụ: Lập chương trình nhận từ bàn phím một số lượng từ 3 đến 10 dữ liệu số nguyên. Sau đó dùng lệnh printf để đưa chúng lên màn hình. Dùng 2 cách • Cách dùng mảng • Cách dùng con trỏ kết hợp với malloc 14 Con trỏ dùng như mảng#define MAX =10;void main(){ int a[MAX], i, n; printf(So luong du lieu); scanf(%d, &n); for(i=0; i Con trỏ dùng như mảngvoid main(){ int *p, i, n; printf(So luong du lieu); scanf(%d, &n); p =(int*) malloc(n*sizeof(int)); //Hoặc p =(int*) calloc(n,sizeof(int)); for(i=0; i Con trỏ và cấu trúcVí dụ: Định nghĩa cấu trúc có các thành phần: • Name: mảng ký tự • Age: kiểu số nguyên Viết chương trình nhập vào danh sách 3 ngườ ...
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu 1: Chương 3A - Huỳnh Cao Thế Cường TRƯỜNGĐẠIHỌCANGIANGKHOAKỸTHUẬTCÔNGNGHỆMÔITRƯỜNG CẤUTRÚCDỮLIỆU1 Giảng viên phụ trách: HUỲNH CAO THẾ CƯỜNG Bộ môn Tin học email: hctcuong@agu.edu.vn 1 1 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ếtMộ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 2 Đặ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 3 Đặ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 4 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ỏ 5 Con trỏ (tt)#include void main(){ int *p, n=1; printf(n=%d , n); p=&n; printf(n=%d , *p); //p}Kết quả: n=1; n=1; 6 Con trỏ - Các phép tính về con trỏvoid main() Kếtquả:{ char *a; C[1]=o char c[]=Pointers; Aftera+1,*a=P a=&c[0]; Aftera++,*a=o printf(c[1]=%c , *(a+1)); printf(Apter a+1, *a=%c , *a); a++; printf(Apter a+1, *a=%c , *a);} 7 Con trỏ - Các phép tính về con trỏvoid main(){ char *a; Kếtquả: char c[]=Pointers; int i; Pointer a=c; s for(i=0; i Con trỏ - Các phép tính về con trỏLưu ý: Ví dụ: char *cp; int *ip; double *dp; Kết quả: giá trị con trỏ tăng lên bao nhiêu đơn vị? cp++ ip++ dp+=5 9 Con trỏ và mảngKhai báo: int *p; int a[4]={1,2,3,4}; p=&a[0]; p=a; print(a[2]=%d, *(p+2)); p=p+2; print(a[2]=%d, *p); hay p=a; print(a[2]=%d, *(p+=2)); 10 Con trỏ dùng như mảngint *p={1,2,3,4};print(%d, *(p+2));char *p=con tro;char *p[3]=[Fortran, Pascal, Lisp];Khi đó: p[0]; p[1]; p[2]; printf(%s, p[2]); 11 Con trỏ dùng như mảngVí dụ: Lập chương trình dùng con trỏ để định nghĩa mảng 3 dã chữ Fortral, Pascan, List. Sửa chúng thành Fortran, Pascal, Lisp và dùng printf để kiểm tra kết quả. 12 Con trỏ dùng như mảnginclude ;void main(){ char *p[3]=[Fortral, Pascan, List]; *(p[0]+6)=n; *(p[1]+5)=l; *(p[2]+3)=p; printf(%s %s %s , p[0], p[1], p[2]);} 13 Con trỏ dùng như mảngVí dụ: Lập chương trình nhận từ bàn phím một số lượng từ 3 đến 10 dữ liệu số nguyên. Sau đó dùng lệnh printf để đưa chúng lên màn hình. Dùng 2 cách • Cách dùng mảng • Cách dùng con trỏ kết hợp với malloc 14 Con trỏ dùng như mảng#define MAX =10;void main(){ int a[MAX], i, n; printf(So luong du lieu); scanf(%d, &n); for(i=0; i Con trỏ dùng như mảngvoid main(){ int *p, i, n; printf(So luong du lieu); scanf(%d, &n); p =(int*) malloc(n*sizeof(int)); //Hoặc p =(int*) calloc(n,sizeof(int)); for(i=0; i Con trỏ và cấu trúcVí dụ: Định nghĩa cấu trúc có các thành phần: • Name: mảng ký tự • Age: kiểu số nguyên Viết chương trình nhập vào danh sách 3 ngườ ...
Tìm kiếm theo từ khóa liên quan:
Cấu trúc dữ liệu Bài giảng Cấu trúc dữ liệu Giải thuật Cơ sở dữ liệu Cấu trúc dữ liệu động Kiểu dữ liệu con trỏGợi ý tài liệu liên quan:
-
62 trang 390 3 0
-
Đề thi kết thúc học phần học kì 2 môn Cơ sở dữ liệu năm 2019-2020 có đáp án - Trường ĐH Đồng Tháp
5 trang 371 6 0 -
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 302 0 0 -
Giáo trình Cơ sở dữ liệu: Phần 2 - TS. Nguyễn Hoàng Sơn
158 trang 282 0 0 -
13 trang 273 0 0
-
Phân tích thiết kế hệ thống - Biểu đồ trạng thái
20 trang 267 0 0 -
Tài liệu học tập Tin học văn phòng: Phần 2 - Vũ Thu Uyên
85 trang 238 1 0 -
Đề cương chi tiết học phần Quản trị cơ sở dữ liệu (Database Management Systems - DBMS)
14 trang 235 0 0 -
8 trang 184 0 0
-
Giáo trình Cơ sở dữ liệu: Phần 2 - Đại học Kinh tế TP. HCM
115 trang 174 0 0