PDA

View Full Version : [Q] Có ai biết gì về mảng động không?



nnh
15-10-2002, 11:21
Bà con ơi, ai biết cách thể hiện cấu trúc mảng động thì chỉ mình với. Và hướng dẫn mình một số thuật toán cơ bản trên mảng động như thêm, xoá hoặc sắp xếp các phần tử trong mảng.(tất nhiên mảng động thì dùng con trỏ rồi).

cauberungxanh
15-10-2002, 16:31
Trong cuốn "Cấu trúc dữ liệu" của trường ĐH Bách Khoa có đầy đủ về sắp xếp, tìm kiếm, cây nhị phân, đồ thị.... đó (tất nhiên có cả vấn đề bạn hỏi). Bạn sắm về mà luyện. Không đủ thời gian và đủ chỗ để thảo luận về mấy cái này đâu. 42000đ một cuốn thì phải.

dark_life2
29-10-2002, 13:52
Mua quyển cua Bùi Thế Tâm về đọc di bạn hay và chuẩn lắm
hehhe

Mach2
30-10-2002, 19:41
Nếu bạn dùng Delphi thì nó cung cấp cho bạn sẵn một số hàm như thêm tạo mảng động, thêm phần tử, bớt phần tử khá tốt. Xái mấy hàm này không cần dùng con trỏ. Đương nhiên là biết về cấu trúc dữ liệu thì tốt còn nếu bạn lười hay mà chỉ cần biết amateur để làm mấy chương trình đơn giản thì tôi nghĩ nhiêu đó cũng đủ rồi.

n2v82
11-11-2002, 19:10
Mảng động thực chất là tận dụng bộ nhớ ngoài chưa được chương trình sử dụng. Tuỳ theo cấu hình máy mà kích thước mảng động có thể khác nhau. Để thêm bớt các phần tử vào mảng thì bạn dùng con trỏ động rất nhiều sách có đề cập đến. Ngoài ra mảng động được dùng để giải những bài toán lớn, chẵng hạn bạn phải lưu mảng 2 chiều kích thước 300x300 kiểu integer chẵng hạn :

Type
mang=array[1..300] Of Integer;
Var
a:array[1..300] Of ^mang;
Procedure KhoiTao;
Var
i:Integer;
Begin
For i:=1 To 300 Do New(a[i]);
End;
Procedure GhiDuLieu;
Var
i,j:Integer;
Begin
For i:=1 to 300 Do
For j:=1 To 300 Do
a[i]^[j]:=RanDom(maxint);
End;
Begin
KhoiTao;
GhiDuLieu;
End.

Mảng động còn rất nhiều ứng dụng bạn thử nghiên cứu xem nhé !

del_gate
13-11-2002, 08:10
Theo mình biết thì đó là mảng con trỏ mà mỗi con trỏ chỉ vào 1 mảng chứ không phải là mảng động.

hieu121081
21-11-2002, 11:34
Cho mình hỏi là có phải bạn muốn nói đến danh sách liên kết ko??
Vì con trỏ chủ yếu là dùng trong danh sách liên kết và đồ hoạ.
Mình thật sự chưa thấy ai dùng kiểu array theo kiểu con trỏ cả.
Nếu đúng là danh sách liên kết thì mình sẽ nói thêm....

Zero
21-11-2002, 15:31
Ủa theo mình biết thì cách sử dụng mảng dạng array [1..x] of ^dong đó rất phổ biến đó nhất là trong các bài toán tin học khi mà cần lưu các mảng 2 chiều lớn > 64 KB.

skywalker
22-11-2002, 05:50
em cũng nghĩ vậy, vì thực sự trong những kỳ thi qg và qt ai cũng sử dụng mảng động thực chất là khi dữ liệu quá lớn không lưu lên mảng bình thường được, chứ chẳng ai bận tâm đến những tính chất riêng của con trỏ làm gì. chỉ cần thên dấu ^, còn lại mọi thao thác đều như mảng bình thường
sẵn tiện hỏi luôn, sao trong chương trình của n2v82 ko thấy dispose, mà nhiều khi em dispose thì chương trình thông báo lỗi 'invalid floating' gì gì á có ai biết tại sao ko

Savage
23-11-2002, 17:26
Bài viết được gửi bởi nnh
Bà con ơi, ai biết cách thể hiện cấu trúc mảng động thì chỉ mình với. Và hướng dẫn mình một số thuật toán cơ bản trên mảng động như thêm, xoá hoặc sắp xếp các phần tử trong mảng.(tất nhiên mảng động thì dùng con trỏ rồi).

Mang dong la mang la mang ma no khong chiem no nho co dinh , Ban co the khai bao so Phan tu cua Mang vao luc runtime bang lenh SetLength va index cua cac phan tu luon bat dau bang 0 .
Ex :
Var Mass : array of Integer;

trong body cua chuong trinh ban :
SetLength( Mass , 10 ) ; chang han thi se cung cap cho ban mot Mang dong 10 elements voi index tu 0 toi 9
- Mang dong khong tuan thu qui tac Copy-On-Write nhu trong string cua Delphi , Vi du khai khai bao hai mang dong X va Y , sau do dung mot phep gan
Y := X;
voi X = {1, 2,3,4,5 .. }
va thay doi Y[0] := 999; chang han thi lap tuc mang X cua ban luc nay cung thay doi theo
x = {999,2,3,4,5...}
day chinh la do , X va Y thuc chat la 2 con tro cung tro den mot vung nho ,khi vung nho nay bi thay doi thi dan den noi dung cua X, Y cung thay doi theo--> Mang dong thuc chat la pointer ..

Voi Mang dong 2 Chieu thi ban khong nhat thiet luon luon phai co dang Hinh chu Nhat ,ma co the co dang Tam giac duoc..
Vi du :
var
A : array of array of Integer;
I, J : Integer;

Ban co the tao mot Matrix nhu sau
SetLength(A,7);
for i := Low(A) to High(A) do
Begin
SetLength(A[i],I+1 )
End;
Cai nay se tao ra cho ban mot Matrix hinh tam giac...