Mảng một chiều là cấu tạo tài liệu trước tiên và cũng chính là cấu tạo tài liệu giản dị & phổ cập nhất. Mảng một chiều hoặc giờ anh là One-Dimensional Array là nội dung bài viết trước tiên vô loạt nội dung bài viết chỉ dẫn về cấu tạo tài liệu bên trên Blog Nguyenvanhieu.vn. Hi vọng series này cung ứng mang đến chúng ta những kỹ năng hữu dụng về phần kỹ năng cấu tạo tài liệu. Bài ghi chép thời điểm ngày hôm nay tiếp tục trình diễn về mảng 1 chiều.
Sau bài học kinh nghiệm này, chúng ta cũng có thể rẽ thăm hỏi bài học kinh nghiệm “Bài tập luyện mảng 1 chiều sở hữu điều giải” nhằm rèn luyện kỹ năng nhé. Hoặc chúng ta cũng có thể tự động rèn luyện trực tuyến nhiều bài xích tập luyện không giống trang web Luyện Code Online.
Bạn đang xem: mảng 1 chiều
1. Lý thuyết về mảng 1 chiều
Mảng là 1 trong những tụ hợp tuần tự động những thành phần sở hữu nằm trong loại tài liệu và những thành phần được tàng trữ vô một sản phẩm những dù ghi nhớ liên tiếp bên trên bộ nhớ lưu trữ. Các thành phần của mảng được truy vấn bằng phương pháp dùng “chỉ số”. Mảng sở hữu độ cao thấp N sẽ có được chỉ số kể từ 0 cho tới N – 1.
Ví dụ, với N = 5, khi cơ chỉ số mảng(tiếng anh là index) sẽ có được độ quý hiếm kể từ 0 cho tới 4(5-1) ứng với 5 thành phần. Các thành phần vô mảng được truy vấn bằng phương pháp dùng <em>array_name[index]
.

Hãy kiểm tra mảng sau, độ cao thấp của mảng là 5. Nếu mình muốn truy vấn độ quý hiếm 12, chúng ta cũng có thể truy vấn bằng phương pháp gọi arr[1].
2. Khai báo mảng 1 chiều
Cú pháp khai báo mảng 1 chiều không giống nhau với từng ngữ điệu lập trình sẵn.
Chẳng hạn, vô C/C++, việc khai báo mảng cần thiết 2 thông số sau:
- Kích thước của mảng: Việc này xác lập con số thành phần hoàn toàn có thể được tàng trữ vô mảng.
- Kiểu tài liệu của mảng: Việc này chỉ định và hướng dẫn loại tài liệu của những thành phần vô mảng; là số vẹn toàn, số thực, ký tự động Hay những loại tài liệu nào là cơ.
Một ví dụ khai báo mảng vô C/C++:
int arr[5];
Đây là cơ hội khai báo mảng tĩnh; cách tiếp là khai thông báo độ cao thấp vừa vặn đầy đủ sử dụng. Đối với mảng động, độ cao thấp mảng tiếp tục tăng thêm khi con số thành phần mảng tăng thêm băng qua độ cao thấp cũ.
3. Khởi tạo nên mảng 1 chiều
Mảng hoàn toàn có thể được khởi tạo nên ngay lập tức bên trên thời gian khai báo mảng hoặc khởi tạo nên sau thời điểm khai báo.
Cú pháp nhằm khởi tạo nên mảng trong những khi khai báo là:
type arr[size] = {elements}
Một ví dụ khai báo kèm cặp khởi tạo nên mảng vô C/C++:
int arr[5] = {4, 12, 7, 15, 9};
Mảng cũng hoàn toàn có thể được khởi tạo nên sau thời điểm khai báo đoạn, bằng phương pháp gán độ quý hiếm mang đến từng thành phần của mảng dùng chỉ số:
type arr[size] arr[index] = 12
Ví dụ bên trên C/C++:
int arr[5]; arr[0] = 4; arr[1] = 12;
4. Các thao tác với mảng 1 chiều
Một thao tác giản dị nhất và hoặc dùng nhất này là việc lặp qua quýt toàn bộ những thành phần của mảng Theo phong cách sau:
type arr[size] = {elements} for idx from 0 đồ sộ size print arr[idx]
Một ví dụ bên trên ngữ điệu C:
#include <stdio.h> int main() { // Array declaration and initialization int arr[5] = {4, 12, 7, 15, 9}; // Iterate over the array for(int idx=0; idx<5; idx++) { // Print out each element in a new line printf("%d\n", arr[idx]); } return 0; }
Để mang đến code tất cả chúng ta được tối ưu rộng lớn, tại đây tôi van lơn phân chia từng tác dụng trở nên 1 hàm riêng biệt biệt:
4.1. Thao tác nhập mảng 1 chiều
Hàm này nhận vô những đối số là mảng loại vẹn toàn a, và con số thành phần n. Hàm ko trả về độ quý hiếm gì nên sở hữu loại là void.
void NhapMang(int a[], int n){ for(int i = 0;i < n; ++i){ printf("\nNhap phan tu a[%d] = ", i); scanf("%d", &a[i]); } }
4.2. Thao tác xuất mảng 1 chiều
Tương tự động như hàm nhập, hàm XuatMang cũng nhận vô mảng loại vẹn toàn a và con số thành phần n. Hàm có mức giá trị trả về là loại void.
void XuatMang(int a[], int n){ for(int i = 0;i < n; ++i){ printf("\nPhan tu a[%d] = %d", i, a[i]); } }
4.3. Chức năng mò mẫm tìm tòi vô mảng 1 chiều
Vẫn nhận vô những đối số như 2 hàm nhập và xuất, và nhận thêm 1 đối số không giống nữa là độ quý hiếm cần thiết mò mẫm tìm tòi v
. Tuy nhiên, hàm này tiếp tục trả về chỉ số trước tiên nhưng mà độ quý hiếm bên trên cơ độ quý hiếm bởi với v
. Nếu không tồn tại độ quý hiếm nào là thỏa mãn nhu cầu, hàm trả về độ quý hiếm -1
.
int TimKiem(int a[], int n, int v){ for(int i = 0;i < n; ++i){ if(a[i] == v){ return i; } } return -1; }
Đây là 1 trong những hàm tiến hành mò mẫm tìm tòi tuyến tính có tính phức tạp O(n). bằng phẳng cơ hội duyệt qua quýt từng thành phần của mảng nhằm đánh giá.
Full source code và điều gọi hàm vô hàm main:
#include <stdio.h> const int MAX = 100; void NhapMang(int a[], int n){ for(int i = 0;i < n; ++i){ printf("\nNhap phan tu a[%d] = ", i); scanf("%d", &a[i]); } } void XuatMang(int a[], int n){ for(int i = 0;i < n; ++i){ printf("\nPhan tu a[%d] = %d", i, a[i]); } } int TimKiem(int a[], int n, int v){ for(int i = 0;i < n; ++i){ if(a[i] == v){ return i; } } return -1; } int main(){ int arr[MAX]; int n; printf("\nNhap ví luong phan tu: "); do{ scanf("%d", &n); if(n <= 0 || n > MAX){ printf("\nNhap lai ví luong phan tu: "); } }while(n <= 0 || n > MAX); printf("\n======NHAP MANG=====\n"); NhapMang(arr, n); printf("\n======XUAT MANG=====\n"); XuatMang(arr, n); printf("\n======TIM KIEM======\n"); int v; printf("\nNhap vao gia tri can tim: "); scanf("%d", &v); printf("\nTim thay cho ví %d tai chi ví %d!", v, TimKiem(arr, n, v)); }
Chạy test chương trình:
Nhap ví luong phan tu: 5 ======NHAP MANG===== Nhap phan tu a[0] = 1 Nhap phan tu a[1] = 2 Nhap phan tu a[2] = 3 Nhap phan tu a[3] = 4 Nhap phan tu a[4] = 5 ======XUAT MANG===== Phan tu a[0] = 1 Phan tu a[1] = 2 Phan tu a[2] = 3 Phan tu a[3] = 4 Phan tu a[4] = 5 ======TIM KIEM====== Nhap vao gia tri can tim: 2 Tim thay cho ví 2 tai chi ví 1!
5. Bài tập luyện thực hành
Bài tập luyện mảng cơ bản
Cho độ cao thấp và những thành phần của mảng A. Hãy in những thành phần của mảng A theo dõi trật tự ngược lại.
Xem thêm: lich nghi 30/4 va 1/5/2018
Input:
- Dòng trước tiên là số N – con số thành phần của mảng A
- N dòng sản phẩm tiếp sau, từng dòng sản phẩm là một số trong những vẹn toàn, ứng với thành phần loại i của mảng A, 0 <= i < N.
Output:
- In đi ra toàn bộ những thành phần của mảng A theo dõi trật tự ngược lại, từng thành phần bên trên một dòng sản phẩm.
SAMPLE INPUT | SAMPLE OUTPUT |
5
4 1 2 7 15 9 |
9
15 7 2 1 4 5 |
Ràng buộc:
- 1 <= N <= 100
- 0 <= A[i] <= 1000
Bài tập luyện mảng nâng cao
Một số yếu tố dường như khó khăn tuy nhiên thực ra nó rất giản dị. Hôm này Admin Hiếu gặp gỡ trở ngại với câu hỏi truy vấn phạm vi. Anh ấy sở hữu một mảng 1 chiều cứa những độ quý hiếm nhị phân 0 và 1. Có 2 loại truy vấn:
0 L R: Kiểm tra số được tạo hình kể từ L cho tới R là số chẵn hoặc lẻ. Số được tạo hình kể từ L cho tới R là độ quý hiếm thập phân của những số nhị phân kể từ L cho tới R phối hợp lại.
1 X: Đổi độ quý hiếm nhị phân bên trên chỉ số loại X.
Input:
- Dòng trước tiên chứa chấp 2 số N và Q. Dòng tiếp sau chứa chấp N số 0 hoặc một cách nhau bởi 1 vệt cơ hội. Q dòng sản phẩm tiếp sau, từng dòng sản phẩm là 1 trong truy vấn.
Ouput:
- Với những truy vấn sở hữu dạng 0 L R in đi ra độ quý hiếm thập phân được tạo nên trở nên kể từ L cho tới R là chẵn hoặc lẻ. Chẵn thì in đi ra “EVEN“, lẻ thì in đi ra “ODD” ko kèm cặp vệt nháy.
Ràng buộc:
Xem thêm: vẽ tranh bảo vệ trái đất xanh
- 1<= N <= 10^6
- 0<= L <= R < N
- 1 <= Q <= 10^6
SAMPLE INPUT | SAMPLE OUTPUT |
5 2 1 0 1 1 0 1 2 0 1 4 |
EVEN |
Giải thích: Truy vấn trước tiên là 1 trong 2, bởi vậy tớ thay đổi độ quý hiếm bên trên chỉ số mảng 2 từ là một trở nên 0, khi cơ mảng mới mẻ là: 1 0 0 1 0. Truy vấn thứ hai là 0 1 4, khi cơ 01102 = 02^0 + 12^1 + 1*2^2 = 610 là số chẵn; Do cơ, đáp án là EVEN.
Lưu ý: Các các bạn nộp bài xích tập luyện xuống mục phản hồi của bài học kinh nghiệm. Admin tiếp tục chữa trị bài xích và review điều giải gom chúng ta.
Bình luận