[Danh sách đối tượng] – Các thuật toán về danh sách đối tượng

Thuật toán về danh sách đối tượng sẽ cung cấp và hướng dẫn bạn một cách cơ bản các thao tác khi làm việc với danh sách các đối tượng từ đó bạn sẽ tự tin hơn khi làm việc với loại bài toán này.

Lập trình hướng đối tượng đã trở nên phổ biến và là lựa chọn trong hầu hết các ngôn ngữ lập trình. Do vậy các thuật toán liên quan đến đối tượng cũng là vấn đề bạn thường xuyên gặp. Thực tế thì nó cũng hoàn toàn giống như thuật toán trên các phần tử có kiểu dữ liệu nguyên thủy. Tuy nhiên, nếu lần đầu gặp bạn cũng gặp nhiều bỡ ngỡ.

Bài viết Các thuật toán về danh sách đối tượng sẽ giúp bạn làm quen, các bài toán phổ biến như:

  •  Tính toán
  •  Tìm kiếm
  •  Sắp xếp

Đây là các bài toán thường gặp, với hy vọng sẽ giúp bạn tự tin hơn khi làm việc với danh sách các đối tượng. Tuy nhiên, phần này bạn nên tìm hiểu trong môn học Lập trình hướng đối tượng thì sẽ được giải thích kỹ hơn.

Bài 1: Viết chương trình khởi tạo một danh sách các học sinh với mỗi học sinh bao gồm các thông tin như sau: Mã học sinh, Tên học sinh, Lớp, Điểm môn Toán, Điểm môn Văn. Sau đó tìm ra học sinh có điểm Trung bình cao nhất (Điểm trung bình = (Điểm môn Toán + Điểm môn Văn)/2).

Phân tích và tìm cách giải

  •  Khai báo một lớp Student{studentCode, studentName, batch, mathScore, LiteratureScore}
  •  Nhập vào danh sách sinh viên
  •  Xem phần tử đầu tiên (max) là phân tử có điểm trung bình cao nhất
  •  Cho lặp biến i từ 0 đến n-1 với n là kích thước của mảng:
       + Nếu a[i].getAvg() >max.getAv thì max=a[i]
  •  In max ra ta sẽ được giá trị lớn nhất

Cách biểu diễn thuật toán

Trong trường hợp này, tôi sử dụng ngôn ngữ giả.

//Khai bao lop Student

Class Student{

   Int studentCode // Mã sinh viên

   String studentName // Tên sinh viên

   String batch // Tên lớp

   Double mathScore    //Điểm môn toán

   Double literatureScore   //Điểm môn văn

//Viết các getter và setter ở đây

// Viết hàm tính điểm Trung bình

Double getAvg(){

   Return  (mathScore + literatureScore)/2

}

}

Declare List<Student> studentList

Input(List<student> studentList){

   Boolean choice=true

   Loop choice

      new student

      Input student.setStudentCode

      Input student.setStudentName

      Input student.setBatch

      Input student.setMathScore

      Input student.setLiteratureScore

      studentList.add(student)  //Thêm student vào danh sách

      Input choice // Thay đổi giá trị choice

}

FindMax(List<Student> studentList){

   Student max = studentList.get(0)

   Loop i=1 to studentList.length-1

      If studentList.get(i).getAvg()>max.getAvg()

         max=studentList.get(i)

   Print max

}

Bài tiếp: Thuật toán sắp xếp danh sách đối tượng

Bài trước: Thuật toán tách chuỗi

Đối tác tuyển dụng