Hai thao tác cơ bản trên biến động: tạo và hủy một biến động do biến con trỏ trỏđến.

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 51 - 53)

* Tạo một biến động do biến con trỏ trỏđến: bằng cách cấp phát vùng nhớ

(địa chỉ bắt đầu và kích thước vùng nhớ tương ứng với kiểu) cho biến động để lưu trữ đối tượng và ta dùng một biến con trỏđể lưu giữ địa chỉ vùng nhớđĩ.

Trong C++, ta dùng hàm new để cấp phát vùng nhớ cho một biến động cĩ kiểu cơ sởT theo cú pháp sau:

BiếnConTrỏ = new KiểuCơSởT; // (1)

BiếnĐộng BiếnConTrỏ x

x

Khi đĩ, ta cĩ thể truy xuất đến (nội dung) biến động (khơng cĩ định danh riêng) thơng qua biến con trỏ như sau: *BiếnConTrỏ.

Hàm new cịn cĩ một cách sử dụng khác là:

BiếnConTrỏ = new KiểuCơSởT [ SLượng] ; // (2)

để cấp phát vùng nhớ cho SốLượng đối tượng cĩ cùng kiểu KiểuCơSởT địa chỉ bắt đầu của vùng nhớ này được lưu giữ trong biến con trỏ BiếnConTrỏ.

Khi đĩ: địa chỉ bắt đầu vùng nhớ của đối tượng được cấp phát động thứ i (0 i SốLượng -1) được truy xuất bởi:

BiếnConTr + i

và nội dung của đối tượng được cấp phát động thứ i (0 i SốLượng -1) được truy xuất bởi:

*(BiếnConTr + i) hoặc BiếnConTr[ i ]

Cú pháp truy xuất trên cũng đúng với “mảng động” đã biết: ptử *BiếnMảngĐộng;

BiếnMảngĐộng = new ptử [MAX];

* Hủy một biến động đã được cấp phát bởi tốn tửnew do biến con trỏ trỏ đến:

Để giải tỏa vùng nhớ của biến động đã được cấp phát trước đĩ bằng tốn tử

new do biến con trỏ BiếnConTrỏ trỏ đến, ta dùng tốn tử delete trong C++ như

sau:

delete BiếnConTr;

hoặc: delete [ ]BiếnConTro;

tương ứng với tốn tử cấp phát vùng nhớ new ở dạng (1) hoặc (2) ở trên. * Ví dụ:

typedef struct { int diem; int tuoi;

hs *con_tro; int *p, *q; p = new int; *p = 6; con_tro = new hs; con_tro->diem = 9; // hoặc: (*con_tro).diem = 9; con_tro->tuoi = 18;

Minh họa một phần bộ nhớ Heap segment: … 6 *p 9 *con_tro 18 … Sau đĩ thi hành các lệnh:

delete con_tro; // giải toả vùng nhớ do con_tro chiếm giữ

q = new int;

Khi đĩ q cĩ thểtrỏđến vùng nhớ do biến con_tro trước đây trỏđến. *q = 8; … 6 *p 8 *q … … delete p; … … 8 *q … …

Dựa trên kiểu dữ liệu động cơ sở là con trỏ, ta cĩ thể xây dựng các kiểu dữ liệu động phong phú khác cĩ nhiều ứng dụng trên thực tế như: danh sách liên kết

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 51 - 53)

Tải bản đầy đủ (PDF)

(148 trang)