CÔNG NGHỆ THÔNG TIN >> SINH VIÊN BKAP

Một số thao tác với mảng 1 chiều [Cấu trúc dữ liệu mảng]

Đăng lúc: 05:09 PM - 08/06/2023 bởi Charles Chung - 690

Trong khoa học máy tính, cấu trúc dữ liệu mảng là một cấu trúc dữ liệu bao gồm một nhóm các phần tử giá trị hoặc biến, mỗi phần tử được xác định ít nhất bằng một chỉ số (index) hoặc khóa (key). Trong bài viết này chúng ta sẽ tìm hiểu về cấu trúc dữ liệu mảng 1 chiều và một vài thao tác trên nó.

1. Giới thiệu về mảng

  • Một kiểu dữ liệu có cấu trúc do người lập trình định nghĩa.
  • Biểu diễn một dãy phần tử có cùng kiểuVí dụ: dãy các số nguyên, dãy các ký tự…
  • Kích thước được xác định ngay khi khai báo và không bao giờ thay đổi (mảng tĩnh).
  • Các phần tử của mảng được phân biệt qua chỉ số, chỉ số phần tử đầu tiên tính từ 0.
  • Mỗi phần tử tương đương với một biến.
  • Trong ngôn ngữ C luôn chỉ định một dãy các ô nhớ liên tục cho một biến kiểu mảng.

2. Khai báo và khởi tạo mảng 1 chiều trong C

  • Khai báo mảng
    //cu phap
    data_type arr_name[n]; //n la so phan tu
    //-----------Vi du--------------------
    //khai bao mang so nguyen a 10 phan tu
    int a[10];
    //khai bao mang so thuc b 10 phan tu
    float b[10];
    //khai bao mang ky tu (chuoi) 25 ky tu
    char fullname[25];
  • Khai báo và khởi tạo giá trị
    //khai bao mang so nguyen a 5 phan tu va khoi tao gia tri
    int a[5]={8,4,5,6,7};
    //khai bao mang so thuc b 5 phan tu va khoi tao gia tri
    double b[10]={4.9,3.5,2.7,2.1,6.0};
  • Truy cập các phần tử trong mảng
    //gan lai cac gia tri cho phan tu mang b
    b[0]=5.2;
    b[1]=-2.4;
    //in ra phan tu thu 3
    printf("b[3]=%f",b[2]);

3. Một số thao tác với mảng 1 chiều trong C

  • Nhập mảng
//dinh nghia ham nhap du lieu cho mang
void input(int a[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("\na[%d]:",i);
        scanf("%d",&a[i]);
    }
}
  • In ra mảng
//dinh nghia ham hien thi du lieu
void display(int a[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%5d",a[i]);
    }
}
  • Tìm phần tử nhỏ nhất
//dinh nghia ham tim max
void showMax(int a[], int n){
    int max=a[0];
    for(int i=1;i<n;i++)
        if(a[i]>max)
            max=a[i];
    printf("Max: %d", max);
}
  • Tìm phần tử lớn nhất
//dinh nghia ham tim max
void showMin(int a[], int n){
    int min=a[0];
    for(int i=1;i<n;i++)
        if(a[i]<min)
            min=a[i];
    printf("Min: %d", min);
}
  • Sắp xếp mảng tăng/giảm
//dinh nghia ham sap xep du lieu
void sort(int a[],int n, int sortType)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(a[i]>a[j] && sortType==1)
            {
                int tg=a[i];
                a[i]=a[j];
                a[j]=tg;
            }
            if(a[i]<a[j] && sortType==0)
            {
                int tg=a[i];
                a[i]=a[j];
                a[j]=tg;
            }
        }
    }
}
  • Chèn 1 phần tử vào mảng
//dinh nghia ham chen 1 phan tu vao mang
int insert(int a[], int n, int x)
{
    int position;
    printf("\nEnter position for insert:");
    scanf("%d",&position);
    if(position>=0 && position<n)
    {
        int i=n;
        while(i>position)
        {
            a[i]=a[i-1];
            i--;
        }
        a[position]=x;
        return 1;//chen thanh cong
    }
    return 0;//chen khong thanh cong
}
  • Xóa 1 phần tử trong mảng
//dinh nghia ham xoa 1 phan tu cua mang
int delete(int a[], int n)
{
    int position;
    printf("\nEnter position for delete:");
    scanf("%d",&position);
    if(position>=0 && position<n)
    {
        int i=position;
        while(i<n-1)
        {
            a[i]=a[i+1];
            i++;
        }
        return 1;//xoa thanh cong
    }
    return 0;//xoa khong thanh cong
}
  • Tìm kiếm phần tử trong mảng
//dinh nghia ham tim kiem phan tu
int search(int a[], int n)
{
    int value,position=-1;
    printf("\nEnter value for search:");
    scanf("%d",&value);
    for(int i=0;i<n;i++)
    {
        if(a[i]==value)
        {
            position=i;
            break;
        }
    }
    return position;
}
  • Chương trình chính
//ham main
void main()
{
    int n=10;
    int m[100];
    printf("\n--------Input array-------");
    input(m,n);
    printf("\n--------Display arrray--------\n");
    display(m,n);
    //goi ham tim max
    showMax(a,n);
    //goi ham tim min
    showMin(a,n);
    //goi ham sap xep
    sort(m,n,0);
    printf("\n--------Display arrray after sort--------\n");
    display(m,n);
    //dinh nghia phan tu can chen
    int x=50;
    //goi ham chen
    if(insert(m,n,x)==1)
        n++;
    else
        printf("\nPosition invalid!");
    printf("\n--------Display arrray after insert--------\n");
    display(m,n);
    //goi ham xoa
    if(delete(m,n)==1)
        n--;
    else
        printf("\nPosition invalid!");
    printf("\n--------Display arrray after delete--------\n");
    display(m,n);
    //goi ham tim kiem
    int position=search(m,n);
    if(position>=0)
        printf("\nFound at %d",position);
    else
        printf("\nNot found!");
    getch();
}
  • Chạy và xem kết quả

Link tải tài liệu học và các bài thực hành: https://hanam88.com/kho-tai-lieu/10/133/slide-bai-giang-va-bai-tap-thuc-hanh-mon-cau-truc-du-lieu-va-giai-thuat-co-ban-chi-danh-cho-sinh-vien-bach-khoa-aptech-.html

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ