Tải Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithms): Cấu trúc dữ liệu mảng - Giới thiệu về cấu trúc dữ liệu mảng

8 25 0
Tải Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithms): Cấu trúc dữ liệu mảng - Giới thiệu về cấu trúc dữ liệu mảng

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

Thông tin tài liệu

 Chỉ mục (Index): Mỗi vị trí của một phần tử trong một mảng có một chỉ mục số được sử dụng để nhận diện phần tử.. Mảng gồm các bản ghi có kiểu giống nhau, có kích thước cố định, mỗi phầ[r]

(1)

Cấu trúc liệu mảng Cấu trúc liệu mảng gì?

Mảng (Array) cấu trúc liệu cũ quan trọng Mảng lưu giữ số phần tử cố định phần tử có kiểu Hầu hết cấu trúc liệu sử dụng mảng để triển khai giải thuật Dưới khái niệm quan trọng liên quan tới Mảng

Phần tử: Mỗi mục lưu giữ mảng gọi phần tử.

Chỉ mục (Index): Mỗi vị trí phần tử mảng có mục số sử dụng để nhận diện phần tử

Mảng gồm ghi có kiểu giống nhau, có kích thước cố định, phần tử xác định số

Mảng cấu trúc liệu cấp phát lien tục Ưu điểm mảng:

 Truy câp phần tử với thời gian số O(1)  Sử dụng nhớ hiệu

 Tính cục nhớ Nhược điểm

 Không thể thay đổi kích thước mảng chương trình dang thực Mảng động

Mảng động (dynamic aray): cấp phát nhớ cho mảng cách động trình chạy chương trình C malloc calloc, C++ new

Sử dụng mảng động ta bắt đầu với mảng có phàn tử, số lượng phàn tử vượt qua khả ảng ta gấp đơi kích thước mảng cuc copy phàn tử mảng cũ vào nửa đầu mảng

Ưu điểm: tránh lãng phí nhớ phải khai báo mảng có kích thước lớn từ đầu Nhược điểm:

+ phải thực them thao tác copy phần tử thay đổi kích thước + số thời gian thực thao tác khơng cịn số

Biểu diễn Cấu trúc liệu mảng

(2)

Hình minh họa phần tử mục:

Dưới số điểm cần ghi nhớ cấu trúc liệu mảng:

 Chỉ mục bắt đầu với

 Độ dài mảng 10, nghĩa mảng lưu giữ 10 phần tử

 Mỗi phần tử truy cập thơng qua mục phần tử Ví dụ, lấy giá trị phần tử mục 27

Phép toán hỗ trợ mảng

Dưới hoạt động hỗ trợ mảng:

 Duyệt: In tất phần tử mảng theo cách in phần tử  Chèn: Thêm phần tử vào mảng mục cho

 Xóa: Xóa phần tử từ mảng mục cho

 Tìm kiếm: Tìm kiếm phần tử sử dụng mục hay giá trị  Cập nhật: Cập nhật giá trị phần tử mục

Trong ngơn ngữ C, mảng khởi tạo với kích cỡ ban đầu, gán giá trị mặc định cho phần tử mảng theo thứ tự sau:

Kiểu liệu Giá trị mặc định

bool false

char

int

float 0.0

double 0.0f

void

(3)

Hoạt động chèn phần tử vào mảng

Hoạt động chèn để chèn nhiều phần tử liệu vào mảng Tùy theo yêu cầu, phần tử chèn vào vị trí đầu, vị trí cuối vị trí mục cho mảng

Phần triển khai hoạt động chèn ví dụ thực Trong ví dụ này, chèn liệu vào cuối mảng

Ví dụ

Giả sử LA mảng tuyến tính khơng có thứ tự có N phần tử K số nguyên dương thỏa mãn K <= N Dưới giải thuật chèn phần tử A vào vị trí thứ K mảng LA

Giải thuật 1 Bắt đầu 2 Gán J=N 3 Gán N = N+1

4 Lặp lại bước J >= K 5 Gán LA[J+1] = LA[J]

6 Gán J = J-1

7 Gán LA[K] = ITEM 8 Kết thúc

Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>

main() {

int LA[] = {1,3,5,7,8}; int item = 10, k = 3, n = 5; int i = 0, j = n;

printf("Danh sach phan tu mang ban dau:\n");

for(i = 0; i<n; i++) {

printf("LA[%d] = %d \n", i, LA[i]); }

(4)

while( j >= k){ LA[j+1] = LA[j]; j = j - 1;

}

LA[k] = item;

printf("Danh sach phan tu cua mang sau hoat dong chen:\n");

for(i = 0; i<n; i++) {

printf("LA[%d] = %d \n", i, LA[i]); }

}

Biên dịch chạy chương trình C cho kết quả:

Hoạt động xóa phần tử từ mảng

Hoạt động xóa xóa phần tử tồn từ mảng tổ chức lại phần tử cịn lại mảng

Ví dụ

Giả sử LA mảng tuyến tính có N phần tử K số ngun dương thỏa mãn K <= N Dưới thuật tốn để xóa phần tử có mảng LA vị trí K

Giải thuật 1 Bắt đầu 2 Gán J=K

(5)

5 Gán J = J+1 6 Gán N = N-1 7 Kết thúc

Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>

main() {

int LA[] = {1,3,5,7,8}; int k = 3, n = 5;

int i, j;

printf("Danh sach phan tu mang ban dau:\n");

for(i = 0; i<n; i++) {

printf("LA[%d] = %d \n", i, LA[i]); }

j = k;

while( j < n){ LA[j-1] = LA[j]; j = j + 1;

}

n = n -1;

printf("Danh sach phan tu mang sau hoat dong xoa:\n");

for(i = 0; i<n; i++) {

printf("LA[%d] = %d \n", i, LA[i]); }

}

(6)

Hoạt động tìm kiếm

Bạn thực hoạt động tìm kiếm phần tử mảng dựa vào giá trị hay mục phần tử

Ví dụ

Giả sử LA mảng tuyến tính có N phần tử K số nguyên dương thỏa mãn K <= N Dưới giải thuật để tìm phần tử ITEM sử dụng phương pháp tìm kiếm (hay tìm kiếm tuyến tính)

Giải thuật 1 Bắt đầu 2 Gán J=0

3 Lặp lại bước J < N

4 Nếu LA[J] ITEM THÌ TỚI BƯỚC 6 5 Gán J = J +1

6 In giá trị J, ITEM 7 Kết thúc

Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>

main() {

int LA[] = {1,3,5,7,8}; int item = 5, n = 5; int i = 0, j = 0;

printf("Danh sach phan tu mang ban dau:\n");

for(i = 0; i<n; i++) {

(7)

while( j < n){

if( LA[j] == item ){ break;

}

j = j + 1; }

printf("Tim thay phan tu %d tai vi tri %d\n", item, j+1); }

Biên dịch chạy chương trình C cho kết quả:

Hoạt động cập nhật (Hoạt động update)

Hoạt động cập nhật update giá trị phần tử tồn mảng mục cho

Giải thuật

Giả sử LA mảng tuyến tính có N phần tử K số nguyên dương thỏa mãn K <= N Dưới giải thuật để update giá trị phần tử vị trí K mảng LA

1 Bắt đầu

2 Thiết lập LA[K-1] = ITEM 3 Kết thúc

Sau code đầy đủ giải thuật ngôn ngữ C: #include <stdio.h>

main() {

int LA[] = {1,3,5,7,8}; int k = 3, n = 5, item = 10; int i, j;

(8)

printf("Danh sach phan tu mang ban dau:\n");

for(i = 0; i<n; i++) {

printf("LA[%d] = %d \n", i, LA[i]); }

LA[k-1] = item;

printf("Danh sach phan tu mang sau hoat dong update:\n");

for(i = 0; i<n; i++) {

printf("LA[%d] = %d \n", i, LA[i]); }

}

Ngày đăng: 27/12/2020, 06:58

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan