1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Cấu trúc dữ liệu mảng

44 85 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 44
Dung lượng 112,5 KB

Nội dung

1 Chương Cấu trúc liệu mảng Định nghĩa khái niệm cấu trúc liệu mảng Mảng loại cấu trúc liệu thường gặp toán thực tế Chẳng hạn biểu ta có số liệu tình hình sử dụng nguyên vật liệu doanh nghiệp Biểu 1: Thống kê mức sử dụng nguyên vật liệu Thép Dầu Tôn Điện Than PX 50 30 20 2,5 15 PX 50 25 50 2,5 20 PX 20 50 40 2,5 15 (Đơn vị tính: Sắt, thép, tơn: Điện : nghìn kw/h Dầu : kg) Biểu có năm dòng cột chứa 15 số liệu khác mức độ sử dụng nguyên vật liệu phân xưởng Ta nói mảng gồm dòng cột Định nghĩa 1 Mảng ( Array ) tập hợp có thứ tự bao gồm số lượng cố định phần tử,được truy cập với tên Trong ví dụ đây, biểu thống kê sử dụng nguyên vật liệu mảng hai chiều Chúng ta xét thêm ví dụ sau Cho số liệu suất lao động 10 doanh nghiệp (Đơn vị tính: Triệu đồng) 149 NS [1] 234 NS [2] 423 NS [3] 207 NS [4] 201 NS [5] 203 NS [6] 205 NS [7] 210 NS [8] 215 NS [9] 245 NS [10] Ta có suất lao động NS [1 10] mảng chiều gồm 10 thành phần Mảng chiều gọi véc tơ Mỗi mảng xác định tên số lượng thành phần Chẳng hạn , mảng suất lao động có mơ tả NS [1 10] Chúng ta dễ dàng truy nhập thành phần mảng cách dùng tên mảng số kèm với tức dùng biến mang số Ví dụ biến mang số NS [2] xác định suất doanh nghiệp thứ 2.2 Cấu trúc liệu mảng chiều 2 Trước hết xem xét cấu trúc liệu mảng chiều Cấu trúc liệu loại thường gặp nhiều hoạt động kinh tế Chẳng hạn suất lao động 10 doanh nghiệp mảng chiều , dãy số thống kê gồm 20 giá trị doanh số bán lẻ 20 trung tâm thương mại năm 1998, số tiền đầu tư vào cơng trình xây dựng 15 nhà đầu tư nước mảng chiều.Trong ví dụ ta có mảng chiều Mảng NS[1 10] biểu diễn suất lao động doanh nghiệp Mảng DOANHSO [1 20] biểu diễn mức doanh số bán lẻ 20 trung tâm thương mại Mảng DAUTU[1 15] biểu diễn mức đầu tư 15 nhà đầu tư vào công trình xây dựng 2.2.1 Phương pháp lưu trữ mảng chiều Chúng ta xem xét vấn đề cấu trúc lưu trữ (Storage mảng chiều Structure ) Địa Vùng nhớ Phần tử mảng Base (A)+0 ← A[1] Base (A)+1 ← A[2] Base (A)+2 ← A[3] Base (A)+3 ← A[4] Base (A)+4 ← A[5] Giả sử ta có mơ tả : Var A : array[1 20] of real; Khai báo thị cho chương trình dịch để vùng nhớ liên tục đủ lớn để chứa phần tử mảng Địa ô nhớ dùng để chứa phần tử gọi địa sở ( Base address) mảng, ký hiệu Base(A).Địa phần tử tính dựa vào địa sở Chúng ta xét ví dụ khác Cho mảng B với mô tả: Var B: array[-3 3] of real; giả sử phần tử lưu trữ hai từ máy 4 Địa Vựng nhớ Phần tử mảng Base (B)+0 ← B[-3] Base (B)+1 Base (B)+2 ← B[-2] Base (B)+3 Base (B)+4 Base (B)+5 Base (B)+6 Base(B)+7 Base(B)+8 11001010111001 Base (B)+9 Trong trường hợp tổng quát, mảng chiều (véc tơ C) có n phần tử C1, C2, Cn Giả sử phần tử chiếm L từ máy mảng lưu trữ L *N từ máy liên mụ hỡnh sau õy: 5 Đ ịa chØ Base (C)+0 Base (C)+1 Base (C)+2 Base (C)+3 Base (C)+4 Base(C)+7 Base(C)+8 Base (C)+9 Base (C)+10 Base (C)+11 Base (C)+( N-1) Vï ng nhí PhÇn tư m¶ng ← C[1] 11001010111001 1010111010101 ← C[N] Địa Ci tính sau: ĐC (Ci) = Base(C) + L * (i-1) Trong Base(C) địa sở; F (i) = L * (i-1) gọi hàm địa Ví dụ Xét cấu trúc lưu trữ mảng suất lao động 15 doanh nghiệp; Giả sử suất lao động doanh nghiệp chứa trong1 từ máy.Ta có hình ảnh cấu trúc lưu trữ nhớ sau: 6 § Þa chØ Base (NS)+0 Base (NS)+1 Base (NS)+2 Base (NS)+3 Base (NS)+4 Base (NS)+5 Base (NS)+6 Base(NS)+7 Base(NS)+8 Base (NS)+9 Base (NS)+10 Base (NS)+11 Base(NS)+12 Base (NS)+13 Base (NS)+14 Vï ng nhí m¶ng NSLD ← NS[1] 11001010111001 11100111010100 ← NS[15] Trong cấu trúc lưu trữ ln ln xác định cách nhanh chóng địa thành phần mảng chiều 2.2.2 phép tốn với mảng chiều Các phép tốn thơng dụng mảng chiều gồm : CREATE Tạo lập mảng chiều SORTING Sắp xếp mảng chiều SEACHING Tìm kiếm mảng chiều CALCULATE Tính tốn với mảng chiều 7 Trong giải thuật với mảng chiều đây, biến Vector có mô tả sau: Var Vector : array [ n] of real; 2.2 Giải thuật tạo lập mảng chiều Cho mảng chiều A=(a i ) i=1,2 n Giải thuật tạo lập mảng.như sau: Procedure CreateVector ( a: Vector ; var n : interger ); Var i: integer; begin For i: = to n Begin write(' a[' ,i,'] =' ); readln(a[i]); end; end; Giải thuật nạp thành phần mảng chiều ta gõ từ bàn phím lưư trữ nhớ dạng véc tơ lưu trữ gồm n phần tử 2.2.4 Giải thuật xếp mảng chiều Trong thực tế thường xuất nhu cầu xếp thành phần mảng chiều theo trình tự xác định tiện lợi cho việc nghiên cứu đánh giá tượng , trình kinh tế 8 kỹ thuật Chẳng hạn, cần xếp mảng suất lao động 10 doanh nghiệp theo trình tự giảm dần để có nhìn tổng qt kết hoạt động doanh nghiệp.Hoặc sếp vốn đầu tư 15 nhà đầu tư theo chiều tăng dần giúp ta đánh giá dễ dàng qui mô đầu tư v v Bây ta xét giải thuật xếp Cho mảng chiều a(n) gồm n phần tử Giải thuật xếp mảng chiều theo chiều tăng dần biểu diễn sau Procedure SortVector (a : Vector; Var n : integer); Var J, I: integer; tg: real; begin For i : = to n-1 For j:= I+1 to n if a[i] >a[ j] then begin tg: = a[i]; a[i]: =a[j]; a[ j] : = tg (* Đổi chỗ a[i] a[j] *) end; end; Nhận xét 9 10 Trong trường hợp xếp giảm dần ta cần có thay đổi nhỏ giải thuật cách thay điều kiện kiểm tra a[i]>a[j điều kiện a[i]=max then begin max:=a[i,j]; k:=i;s:=j; end; end; write(' Gia tri max la: ',max,' dg= ',k,' ct= ',s); min:=a[1,1]; for i:=1 to m for j:=1 to n begin if a[i,j]a[i,k] then begin tg:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=tg; 32 32 33 end; {Hien ket qua tu day} for i:=1 to m begin writeln; for j:=1 to n begin write(a[i,j]:3); end; end; readln end Bài toán Cho mảng hai chiều A= (Aij) i=1,2,3, n;j=1,2, m Lập giải thuật: - Xác định số lượng thành phần khác khơng dòng? - Xác định số lượng thành phần khác không cột? - Xác định tỷ lệ thành phần khác khơng mảng so với tồn thành phần nó? Program Nhap_va _xac_ dinh_ #0 _cua_ mang ; Type mt=array[1 20,1 20] of integer; vt=array[1 20] of integer; Var a:mt; 33 33 34 h,c:vt; l,m,n,i,j:integer; tl:real; Begin write(' Cho biet so dong: ');readln(m); write(' Cho biet so cot: ');readln(n); for i:=1 to m for j:=1 to n begin write('a[',i,',',j,']= ');readln(a[i,j]); end; for i:=1 to m begin for j:=1 to n if a[i,j]0 then h[i]:=h[i]+1; end; for i:=1 to m for j:=1 to n begin for i:=1 to m if a[i,j]0 then c[j]:=c[j]+1; end; l:=0; for i:=1 to m for j:=1 to n if a[i,j]0 then l:=l+1; tl:=m*n/l; {Hien ket qua tu day} for i:=1 to m 34 34 35 begin write(' h[',i,']=',h[i]) end; writeln; for j:=1 to n begin write(' c[',j,']=',c[j]) end; writeln; write(' Ty le phan #0 so voi toan bo la: ',tl:6:2); readln end Bài toán Cho mảng hai chièu A = ( A i j ) i = 1,2, n j = 1,2 ,.n Lập giải thuật: - Sắp sếp dòng lẻ mảng theo thứ tự giảm dần; - Sắp sếp dòng chẵn mảng theo thứ tự tăng dần? Program Sap _ dong_cot; Uses Crt; Type mt=array[1 20,1 20] of integer; Var a:mt; tg,min,k,s,max,m,n,i,j:integer; Begin ClrScr; 35 35 36 write(' Cho biet so dong: ');readln(m); write(' Cho biet so cot: ');readln(n); for i:=1 to m for j:=1 to n begin write('a[',i,',',j,']= ');readln(a[i,j]); end; for i:=1 to m if (i mod 2)=0 then begin for j:=1 to n-1 for k:=j+1 to n if a[i,j]>a[i,k] then begin tg:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=tg; end; end else begin for j:=1 to n-1 for k:=j+1 to n if a[i,j]=maxc then begin maxc:=a[i,j]; 39 39 40 g[j]:=i; end; end; if g[j]=1 then f[j]:='Ha noi' else if g[j]=2 then f[j]:='Sai gon' else if g[j]=3 then f[j]:='Hai phong' else f[j]:='Da nang'; writeln(' Muc thu nhap ', e[j], ' co so nguoi nhieu nhat o ',f[j]); end; writeln; for i:=1 to m begin maxh:=a[i,1]; for j:=1 to n begin if a[i,j]>=maxh then begin maxh:=a[i,j]; d[i]:=j; end; end; if d[i]=1 then f[i]:='1 trieu' else if d[i]=2 then f[i]:='2 trieu' else f[i]:='10 trieu'; writeln(' Muc thu nhap co so nguoi dong nhat cua ',b[i],' la ',f[i]); 40 40 41 end; writeln; ts:=0;tsn:=0; for i:=1 to m tsn:=tsn+a[i,n]; for j:=1 to n ts:=ts+a[i,j]; tl:=tsn/ts; writeln('Ty cua nhung nguoi co thu nhap 10 trieu so voi tong so: ',tl:5:3); readln End 41 41 42 42 42 43 Câu hỏi chương - Định nghĩa cấu trúc liệu mảng Cho ví dụ mảng chiều mảng hai chiều? Phương pháp truy nhập mảng? - Khái niệm mảng chiều, phương pháp lưu trữ mảng chiều, cho ví dụ? - Trình bày giải thuật tạo lập mảng chiều? Phương pháp tổ chức in mảng chiều thành dòng cột? - Trình bày giải thuật sếp mảng chiều? Minh hoạ giải thuật ví dụ số cụ thể? - Trình bày giải thuật tìm kiếm mảng chiều? - Trình bày giải thuật tính tốn mảng chiều? Minh hoạ giải thuật ví dụ số cụ thể? - Khái niệm mảng hai chiều? Phương pháp lưu trữ mảng hai chiều? Tính tốn địa thành phần A[2,4] mảng hai chiều A gồm dòng cột , biết phần tử mảng lưu trữ từ máy? - Trình bày giải thuật tạo lập mảng hai chiều? - Trình bày giải thuật tìm kiếm phần tử mảng hai chiều? 10 - Trình bày giải thuật cộng mảng hai chiều? Cho ví dụ cụ thể cộng mảng hai chiều ứng dụng kinh tế? 11 - Trình bày giải thuật nhân mảng hai chiều với véc tơ? Cho ví dụ ứng dụng giải thuật kinh tế? 12 - Trình bày giải thuật nhân mảng hai chiều với Cho ví dụ ứng dụng giải thuật kinh tế 43 43 44 44 44 ... CH2 CH3 CH4 CH5 Loại hàng 120 0 1340 1450 1345 128 0 Loại hoàng 23 00 24 00 25 00 26 00 23 00 Biểu Giá bán lẻ loại hàng ( Đơn vị : Nghìn đồng) Loại hàng Loại hàng 20 Loại hàng10 120 0 1 320 1450 124 5... 10 doanh nghiệp (Đơn vị tính: Triệu đồng) 149 NS [1] 23 4 NS [2] 423 NS [3] 20 7 NS [4] 20 1 NS [5] 20 3 NS [6] 20 5 NS [7] 21 0 NS [8] 21 5 NS [9] 24 5 NS [10] Ta có suất lao động NS [1 10] mảng chiều... '); Writeln(c[i]); end; end; 22 22 23 2. 3.6 Giải thuật cộng mảng hai chiều Chúng ta xét toán dạng tổng quát sau đây: Cho mảng hai chiều A=(aij) B=(bij) i=1 ,2, n j=1 ,2, m Lập giải thuật cộng hai

Ngày đăng: 18/12/2018, 12:14

TỪ KHÓA LIÊN QUAN

w