intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG

Chia sẻ: Nguyen Quoc Khanh | Ngày: | Loại File: PPT | Số trang:41

216
lượt xem
42
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Cấp phát ô nhớ dư, gây ra lãng phí ô nhớ. Cấp phát ô nhớ thiếu, chương trình thực thi bị lỗi. Để tránh những hạn chế trên, ngôn ngữ C++ cung cấp cho ta một loại biến đặc biệt gọi là biến động với các đặc điểm sau: Chỉ phát sinh trong quá trình thực hiện chương trình chứ không phát sinh lúc bắt đầu chương trình. Khi chạy chương trình, kích thước của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể thay đổi. Sau khi sử dụng xong có thể giải phóng để tiết...

Chủ đề:
Lưu

Nội dung Text: DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG

  1. CHƯƠNG I : TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GI ẢI CHƯƠNG II : MỘT SỐ THUẬT TOÁN TÌM KIẾM VÀ SẮP XẾP CHƯƠNG III : DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG IV : CÂY
  2. I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ Địa chỉ ô nhớ Bộ nhớ N A M 4 25 int andy = 25 Nội dung ô nhớ char name[10] = “NAM” b=4
  3. I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ 2 5 7 9 4 8 9 int a[6] char ten[100]
  4. I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ 25 25 a b pa c a = 25 b=a pa = &a c = *pa Con trỏ là biến lưu địa chỉ của biến khác
  5. I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ 6442 25 andy ted andy = 25 andy = 25 andy *P &andy = 6442 ted = &andy 25 = 6442 ted = 8444 &ted = 25 *ted
  6. I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ Một số hạn chế có thể gặp phải khi sử dụng các biến tĩnh:  Cấp phát ô nhớ dư, gây ra lãng phí ô nhớ.  Cấp phát ô nhớ thiếu, chương trình thực thi bị lỗi. Để tránh những hạn chế trên, ngôn ngữ C++ cung cấp cho ta một loại biến đặc biệt gọi là biến động với các đặc điểm sau: Chỉ phát sinh trong quá trình thực hiện chương trình chứ không phát sinh lúc bắt đầu chương trình. Khi chạy chương trình, kích thước của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể thay đổi. Sau khi sử dụng xong có thể giải phóng để tiết kiệm chỗ trong bộ nhớ. Tuy nhiên các biến động không có địa chỉ nhất định nên ta không thể truy cập đến chúng được. Vì thế, ngôn ngữ C++ lại cung cấp cho ta một loại biến đặc biệt nữa để khắc phục tình trạng này, đó là biến con trỏ (pointer) với các đặc điểm: Biến con trỏ không chứa dữ liệu mà chỉ chứa địa chỉ của dữ liệu hay chứa địa chỉ của ô nhớ chứa dữ liệu. Kích thước của biến con trỏ không phụ thuộc vào kiểu dữ liệu, luôn có kích thước cố định là 2 byte.
  7. I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ  Toán tử lấy địa chỉ (&) Ví dụ : int a; int *p; p = &a;  Toán tử tham chiếu (*) Ví dụ : int a, b; int *p; a = 2; p = &a; b = *p;
  8. I. KIỂU CON TRỎ 2. Khai báo biến Con Trỏ Cú pháp: * Ý nghĩa: Khai báo một biến có tên là con trỏ dùng để chứa địa chỉ của các biến có kiểu Ví dụ 1: Khai báo 2 biến a, b có kiểu int và 2 biến pa, pb là 2 biến con trỏ kiểu int int a, b, *pa, *pb; Ví dụ 2: Khai báo biến f kiểu float và biến pf là con trỏ float float f, *pf;
  9. I. KIỂU CON TRỎ 2. Khai báo biến Con Trỏ char *ted = “hello” h e l l o \0 ted [4] 5441 *(ted + 4) ted
  10. I. KIỂU CON TRỎ 2. Các thao tác trên Con Trỏ 2.1 Gán địa chỉ của biến cho biến con trỏ (Toán tử &) Ví dụ: int a; float b; int *pa; float *pb; pa = &a; pb = &b; Lưu ý: ví dụ sau đây không đúng do không tương thích kiểu: int a; float *pb; pb = &a;
  11. I. KIỂU CON TRỎ 2. Các thao tác trên Con Trỏ 2.2 Nội dung của ô nhớ con trỏ chỉ tới (Toán tử *) Ví dụ: int x = 100; int y; int *ptr; ptr = &x; y = *ptr; cout
  12. I. KIỂU CON TRỎ 2. Các thao tác trên Con Trỏ 2.3 Các phép tính số học với pointer Việc thực hiện các phép tính số học với con trỏ hơi khác so với các kiểu dữ liệu số nguyên khác, trước hết chỉ phép cộng và phép trừ được phép dùng. Nhưng kết quả cộng trừ phụ thuộc vào kích thức dữ liệu mà biến con trỏ trỏ tới char chiếm 1byte, int chiếm 2 byte, long chiếm 4 byte Ví dụ mychar++ char *mychar mychar : 1000 myint++ int *myint myint : 2000 mylong++ long *mylong mylong : 3000
  13. I. KIỂU CON TRỎ 2. Các thao tác trên Con Trỏ 2.3 Các phép tính số học với pointer #include void main() Value 1 = 10 Value 2 = 20 { int value1 = 5, value2 = 15; int *mypointer; mypointer = &value1; *mypointer = 10; mypointer = &value2; *mypointer = 20; cout
  14. I. KIỂU CON TRỎ 2. Các thao tác trên Con Trỏ 2.3 Các phép tính số học với pointer #include Value 1 = 10 Value 2 = 20 void main() { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; p2 = &value2; *p1 = 10; *p2 = *p1; p1 = p2; *p1 = 20; cout
  15. I. KIỂU CON TRỎ 2. Các thao tác trên Con Trỏ 2.3 Các phép tính số học với pointer #include void main() { int a[5]; int *p; int i; 6, 4, 9, 2, 7 p = a; *p = 6; p++; *p=4; p = &a[2]; *p = 9; p = a+3; *p = 2; p = a; *(p+4) = 7; for (i = 0; i < 5;i++) cout
  16. I. KIỂU CON TRỎ 3. Cấp phát vùng nhớ cho biến con trỏ Trước khi sử dụng biến con trỏ, ta nên cấp phát vùng nhớ cho biến con trỏ này quản lý địa chỉ. Việc cấp phát được thực hiện nhờ các hàm malloc( ), calloc( ) trong thư viện alloc.h. Cú pháp: void *malloc(size_t size) Cấp phát vùng nhớ có kích thước là size void *calloc(size nitems, size_t size) Cấp phát vùng nhớ có kích thước là nitems*size
  17. I. KIỂU CON TRỎ 3. Cấp phát vùng nhớ cho biến con trỏ Ví dụ: Giả sử ta có khai báo: int a, *pa, *pb; pa = (int*)malloc(sizeof(int)); /* Cấp phát vùng nhớ có kích thước bằng với kích thước của một số nguyên */ pb= (int*)calloc(10, sizeof(int)); /* Cấp phát vùng nhớ có thể chứa được 10 số nguyên*/ Lưu ý: Khi sử dụng hàm malloc() hay calloc(), ta phải ép kiểu vì nguyên mẫu các hàm này trả về con trỏ kiểu void.
  18. I. KIỂU CON TRỎ 3. Cấp phát vùng nhớ cho biến con trỏ = new delete < pointer > Ví dụ: Giả sử ta có khai báo struct node { int info; node *pNext; }; node *p; p = new node; delete p;
  19. II. DANH SÁCH LIÊN KẾT ĐƠN 1. Khái niệm  Cấu trúc danh sách liên kết là cấu trúc động, việc cấp phát nút và giải phóng nút trên danh sách xảy ra khi chương trình đang chạy. Ta thường cấp phát nút cho danh sách liên kết bằng biến động.  Các phần tử sẽ được cấp phát vùng nhớ trong quá trình thực thi chương trình, do đó chúng có thể nằm rải rác ở nhiều nơi khác nhau trong bộ nhớ (phân bố không liên tục).
  20. II. DANH SÁCH LIÊN KẾT ĐƠN 1. Khái niệm
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2