dang cai dat danh sach

 Type Sinhvien =         record

                                                Hoten: String;

                                                Lớp :   String;

                                                            SoBD: String;

                                                            ĐTB: real;

            '                                               Next: ^ Sinhvien;

                                                end;

            List = ^Sinhvien;

            Var L: List;

*) Viết giải thuật

1) Nhập danh sách gồm n sinh viên    (1 đ)

            + Nhập số lượng sinh viên hiện có n: readln(n);

            + Sử dụng vòng lăp i chạy từ 1 -> n, mỗi lần lặp nhập 1 sinh viên và gắn vào danh sách:

                        for i:=1 to n do

                                    begin

- new(M); {yêu cầu MT cấp phát ô nhớ chứa dữ liệu của sinh viên cần nhập           }

- Nhập các thông tin về sinh viên, lưu vào ô nhớ được trỏ bởi M

- Gắn kết ô nhớ được trỏ bởi M vào danh sách

                                    end;

2) Loại bỏ những SV có điểm trung bình <5              (1 đ)

Kiểm tra xem danh sách L có rỗng hay không? Nếu rỗng trở về chương trình chính, nếu không rỗng thực hiện loại bỏ như sau:

-          Sử dụng con trỏ phụ q duyệt tử đầu đến cuối danh sách, nếu q^.dtb <5  thì gọi thủ tục loại bỏ phần tử được trỏ bởi q trong danh sách

-          Viết thủ tục loại bỏ phần tử được trỏ bởi con trỏ q trong danh sách L:

a)      Giả sử đã biết vị trí con trỏ q

b)      Sử dụng con trỏ phụ p di chuyển đến vị trí trước q:

P:= L;

While p^.next<> q do p:= p^.next;

c)      Loại bỏ phần tử ở vị trí q:

 p^.next := q^.next;

dispose(q);

q:= p^.next;// lưu vị trí tiếp theo vị trí loại bỏ để còn loại bỏ tiếp

            3) Sắp xếp danh sách theo trường lớp tăng dần         (1 đ)

            Có thể sử dụng một trong các thuật toán sắp xếp để sắp xếp dữ liệu trên danh sách liên kết, ở đây ta sử dụng giải thuật sắp xếp chọn trực tiếp (selection sort) và sử dụng cách tiếp cận:giữ nguyên mối liên kết của các nút trong danh sách và hoán vị nội dung của các nút:

Giải thuật:

Procedure ListSelection_Sort(var L: List)

  Var p, q, min: List;

  Begin

    p:=L;

    While (p<>nil) do

       Begin

         q:=p^.next;

         min:=p;

         While (q<>nil) do      

            Begin

              If (q^.infor<min^.infor) then min:=q;

              q:=q^.next;

            End;

         Hoanvi(min^.infor,p^.infor);

         P:=P^.next;

       End;

  End;

            4) Hiển thị danh sách sinh viên theo từng lớp: Sử dụng con trỏ M duyệt tử đầu đến cuối danh sách đã được sắp theo lớp ở câu 3, duyệt đến sinh viên nào thì hiển thị các thông tin về sinh viên đó:      (1 đ)

            M: = L; p:=M;

 writeln(‘Các sinh vien lop M^.lop la:’);

            While (M<> nil) do

                        Begin

                                    Write(M^. hoten);

                                    Write(M^. Lop);

                                    Write(M^. sbd);

                                    P:=M;

                                    M := M^.next;

                                    If (M^.lop<>p^.lop) then writeln(‘Các sinh vien lop M^.lop la:’);

                        End;

Bạn đang đọc truyện trên: truyentop.pro

Tags: