Liệt kê các phần tử xuất hiện trong mảng C | Laptrinhcanban.com

Liệt kê các phần tử xuất hiện trong mảng C

Hướng dẫn cách liệt kê các phần tử xuất hiện trong mảng C. Bạn sẽ học được cách liệt kê các phần tử xuất hiện một lần trong mảng C, cũng như cách liệt kê các phần tử xuất hiện nhiều hơn 1 lần sau bài học này.

Liệt kê các phần tử xuất hiện một lần trong mảng C

Để liệt kê các phần tử xuất hiện một lần trong mảng C, trước hết chúng ta cần xóa đi tất cả các phần tử trùng trong mảng và chỉ để lại các phần tử chỉ xuất hiện một lần. Rồi sau đó chúng ta liệt kê các phần tử chỉ xuất hiện một lần còn lại trong mảng là xong.

Để xóa phần tử trùng trong mảng C, chúng ta sẽ sử dụng tới một trong 2 cách mà Kiyoshi đã hướng dẫn trong bài:

Và dưới đây là cách liệt kê các phần tử xuất hiện một lần trong mảng C sử dụng phương pháp Xóa phần tử trùng trong mảng C đã được sắp xếp:

#include <stdio.h>
#include <stdlib.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm in phần tử trong mảng*/
void show_array(int array[], int length){
for(short i = 0; i < length; i++) printf("%d ", array[i]);
printf("\n");
}

/*Tạo hàm so sánh tăng dần sử dụng trong hàm qsort*/
int compareIntAsc(const void* a, const void* b)
{
int aNum = *(int*)a;
int bNum = *(int*)b;

return aNum - bNum;
}

/*Tạo hàm xoá phần tử trùng và liệt kê
các phần tử xuất hiện một lần trong mảng C*/
void array_unique(int* array, size_t size){
size_t end = 0;

for (size_t i = 1; i < size; ++i) {
if (array[i] != array[end]) { //Tìm thấy phần tử trùng nhau
++end; //Tăng dần vị trí đầu mảng để gán phần tử trùng nhau
array[end] = array[i]; //Ghi đè phần tử trùng nhau vào vị trí đầu mảng
}
}
//Liệt kê các phần tử xuất hiện một lần trong mảng C (các phần tử còn lại)
show_array(array, end+1);
}

int main(void){
int array1[] = { 7, 2, 6, 7, 4, 9, 8 };
int array2[] = { 7, 2, 6, 7, 7 };
int array3[] = { 7, 7, 7 };

// Sắp xếp các mảng theo thứ tự tăng dần
qsort(array1, SIZE_OF_ARRAY(array1), sizeof(int), compareIntAsc);
qsort(array2, SIZE_OF_ARRAY(array2), sizeof(int), compareIntAsc);
qsort(array3, SIZE_OF_ARRAY(array3), sizeof(int), compareIntAsc);

//Xoá phần tử trùng nhau và liệt kê các phần tử xuất hiện một lần trong kết quả
array_unique(array1, SIZE_OF_ARRAY(array1));
array_unique(array2, SIZE_OF_ARRAY(array2));
array_unique(array3, SIZE_OF_ARRAY(array3));

return 0;
}

Kết quả phép liệt kê các phần tử xuất hiện một lần trong mảng Cnhư sau:

2 4 6 7 8 9 
2 6 7
7

Liệt kê các phần tử xuất hiện nhiều hơn 1 lần trong mảng C

Để liệt kê các phần tử xuất hiện nhiều hơn 1 lần trong mảng C, chúng ta cần phải xác định được các phần tử xuất hiện nhiều hơn 1 lần trong mảng đó. Sau đó liệt kê các phần tử này và in ra màn hình kết quả là xong.

Để lấy các xuất hiện nhiều hơn 1 lần, chúng ta sẽ dùng tới hàm tự tạo mà Kiyoshi đã hướng dẫn trong bài:

Và chúng ta viết hàm liệt kê các phần tử xuất hiện nhiều hơn 1 lần mảng C trong chương trình như sau:

#include <stdio.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))


/*Tạo hàm in phần tử trong mảng*/
void show_array(int array[], int length){
for(short i = 0; i < length; i++) printf("%d ", array[i]);
printf("\n");
}

/*Thay đổi hàm kiểm tra phần tử trùng nhau ở phương pháp một*/
/*Và tạo hàm lấy phần tử trùng trong mảng C*/
void take_duplicate_element(const int* array, size_t size){
int result[100], count=0;

for (size_t i = 0; i < size - 1; ++i) {
for (size_t j = i + 1; j < size; ++j) {
if (array[i] == array[j]) {
result[count]=array[i];
++ count;
}
}
}
//liệt kê các phần tử xuất hiện nhiều hơn 1 lần trong mảng C
show_array(result, count);
}

int main(void){
int array1[] = {1,2,3,3,2,5};
int array2[] = {1,1,2,3,2,5,5,8,9,6};

//liệt kê các phần tử xuất hiện nhiều hơn 1 lần trong mảng C
take_duplicate_element(array1,SIZE_OF_ARRAY(array1));
take_duplicate_element(array2,SIZE_OF_ARRAY(array2));


return 0;
}

Kết quả phép liệt kê các phần tử xuất hiện nhiều hơn 1 lần mảng C như sau:

2 3 
1 2 5

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách liệt kê các phần tử xuất hiện trong mảng C rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.