Khai báo và sử dụng danh sách liên kết trong Pascal
Số trang: 15
Loại file: pdf
Dung lượng: 170.24 KB
Lượt xem: 15
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Danh sách liên kết đơn Danh sách là một dãy hữu hạn các phần tử thuộc cùng một lớp đối tượng nào đó. Ví dụ : danh sách sinh viên, danh sách vật tư, danh sách các hoá đơn, danh sách các số thực. Trong các bài trước ta đã dùng mảng để biểu thị một danh sách. Cách này có các nhược điểm: kích thước của mảng phải định trước nên tốn bộ nhớ (số phần tử thực tế dùng nhiều khi rất ít so với khai báo), khi thêm một phần tử vào mảng hoặc xoá một...
Nội dung trích xuất từ tài liệu:
Khai báo và sử dụng danh sách liên kết trong Pascal Khai báo và sử dụng danh sách liên kết trong Pascal1. Danh sách liên kết đơnDanh sách là một dãy hữu hạn các phần tử thuộc cùng một lớp đối tượng nào đó.Ví dụ : danh sách sinh viên, danh sách vật tư, danh sách các hoá đơn, danh sáchcác số thực. Trong các bài trước ta đã dùng mảng để biểu thị một danh sách. Cáchnày có các nhược điểm: kích thước của mảng phải định trước nên tốn bộ nhớ (sốphần tử thực tế dùng nhiều khi rất ít so với khai báo), khi thêm một phần tử vàomảng hoặc xoá một phần tử ra khỏi mảng ta phải mất nhiều thời gian để dồn mảng.Danh sách liên kết dùng để cài đặt một danh sách sẽ khắc phục được các nhượcđiểm trên của mảng. Danh sách liên kết thuận gồm nhiều phần tử nằm không liêntục trong Heap. Cấu tạo của danh sách liên kết thuận: có một con trỏ first chứa địachỉ của phần tử đầu tiên của danh sách, phần tử đầu có phần dữ liệu và một contrỏ next để chứa địa chỉ của phần tử thứ hai, tổng quát phần tử thứ i có phần dữliệu và một con trỏ next để chứa địa chỉ của phần tử thứ i+1, đối với phần tử cuốicùng giá trị của con trỏ next bằng NIL. Để thuận tiện khi thêm phần tử mới vàocuối danh sách liên kết ta dùng một con trỏ last chứa địa chỉ của phần tử cuốicùng. Khởi tạo một danh sách rỗng first = NIL Chương trìnhDslk.pas minh hoạ các cách làm việc với danh sách liên kết thuận. Phần dữ liệucủa một phần tử là các thông tin về một sinh viên.USES crt;TYPE SVienPtr = ^SVien; SVien = RECORD maso: STRING[6]; hoten: STRING[23]; dtb: REAL; next: SVienPtr END;VAR first, last: SVienPtr; chon: BYTE; traloi: CHAR;PROCEDURE Bosung;VAR p: SVienPtr; ans: INTEGER;BEGIN WHILE TRUE DO BEGIN new(p); WITH p^ DO BEGIN write(Ma sinh vien : ); readln(maso); write(Ho va ten : ); readln(Hoten); write(Diem trung binh: ); readln(dtb); END; p^.next:=NIL; IF first=NIL THEN BEGIN first:= p; last:= p END ELSE BEGIN last^.next:= p; last:= p END; write(Co tiep tuc khong 1/0 ? ); readln(ans); IF ans=0 THEN break; END;END;PROCEDURE DuyetXuoi;VAR p: SVienPtr;BEGIN IF first = NIL THEN BEGIN writeln(D.sach rong); exit END; p := first; WHILE p NIL DO BEGIN WITH p^ DO writeln(maso:5, ,Hoten:25, ,dtb:5:2); p := p^.Next; END;END;PROCEDURE ChenSau;VAR q,p: SVienPtr; found: BOOLEAN; masv: STRING[6];BEGIN IF first NIL THEN BEGIN write(Ma so SV can tim de chen : ); readln(masv); p:= first; found:= FALSE; WHILE (pNIL) AND (NOT found) DO IF p^.maso=masv THEN found := TRUE ELSE p:=p^.next; IF found THEN BEGIN new(q); WITH q^ DO BEGIN write( Ma so : ); readln(maso); write( Ho ten : ); readln(Hoten); write( Diem trung binh : ); readln(dtb); END; q^.next:= p^.next; p^.next:= q; END ELSE BEGIN write(Khong tim thay); readln END; END;END;PROCEDURE TimXoa;VAR masv: STRING[6]; found: BOOLEAN; p,q: SVienPtr;BEGIN write(Ma so SV can loai khoi danh sach : ); readln(masv); p:= first; IF pNIL THEN BEGIN found:= FALSE; WHILE (pNIL) AND (NOT found) DO IF p^.maso=masv THEN found := TRUE ELSE BEGIN q:=p; p:=p^.next END; IF found THEN BEGIN IF p=first THEN first :=p^.next ELSE q^.next:=p^.next; IF p^.next=NIL THEN last:=q; dispose(p) END ELSE BEGIN write(Khong tim thay); readln END; END;END;BEGIN clrscr; First := NIL; REPEAT writeln; writeln(1. Bo sung mot sinh vien); writeln(2. Duyet danh sach sinh vien); writeln(3. Tim kiem mot phan tu va chen vao sau); writeln(4. Tim kiem mot phan tu va xoa); writeln(5. Ket thuc chuong trinh); writeln; write(Chon chuc nang: ); readln(chon); writeln; CASE chon OF 1: Bosung; 2: DuyetXuoi; 3: ChenSau; 4: TimXoa; END; UNTIL chon=5; WHILE firstNIL DO BEGIN last:= first; first:= first^.next; dispose(last) END;END.2. Danh sách liên kết képDanh sách liên kết kép là danh sách mà mỗi phần tử của nó gồm ba thành phần:phần dữ liệu, con trỏ next chứa địa chỉ phần tử tiếp sau, con trỏ prev chứa địa chỉcủa phần tử liền trước, con trỏ next của phần tử cuối cùng trong danh sách bằngNIL, con trỏ prev của phần tử đầu tiên cũng bằng NIL. Danh sách liên kết képhoàn toàn xác định bởi hai con trỏ: con trỏ firstchứa địa chỉ phần tử đầu tiên, contrỏ last chứa địa chỉ phần tử cuối cùng. Danh sách liên kết kép cho phép dễ dàngxác định phần tử đứng trước một phần tử đã biết, do đó nó thuận tiện hơn d ...
Nội dung trích xuất từ tài liệu:
Khai báo và sử dụng danh sách liên kết trong Pascal Khai báo và sử dụng danh sách liên kết trong Pascal1. Danh sách liên kết đơnDanh sách là một dãy hữu hạn các phần tử thuộc cùng một lớp đối tượng nào đó.Ví dụ : danh sách sinh viên, danh sách vật tư, danh sách các hoá đơn, danh sáchcác số thực. Trong các bài trước ta đã dùng mảng để biểu thị một danh sách. Cáchnày có các nhược điểm: kích thước của mảng phải định trước nên tốn bộ nhớ (sốphần tử thực tế dùng nhiều khi rất ít so với khai báo), khi thêm một phần tử vàomảng hoặc xoá một phần tử ra khỏi mảng ta phải mất nhiều thời gian để dồn mảng.Danh sách liên kết dùng để cài đặt một danh sách sẽ khắc phục được các nhượcđiểm trên của mảng. Danh sách liên kết thuận gồm nhiều phần tử nằm không liêntục trong Heap. Cấu tạo của danh sách liên kết thuận: có một con trỏ first chứa địachỉ của phần tử đầu tiên của danh sách, phần tử đầu có phần dữ liệu và một contrỏ next để chứa địa chỉ của phần tử thứ hai, tổng quát phần tử thứ i có phần dữliệu và một con trỏ next để chứa địa chỉ của phần tử thứ i+1, đối với phần tử cuốicùng giá trị của con trỏ next bằng NIL. Để thuận tiện khi thêm phần tử mới vàocuối danh sách liên kết ta dùng một con trỏ last chứa địa chỉ của phần tử cuốicùng. Khởi tạo một danh sách rỗng first = NIL Chương trìnhDslk.pas minh hoạ các cách làm việc với danh sách liên kết thuận. Phần dữ liệucủa một phần tử là các thông tin về một sinh viên.USES crt;TYPE SVienPtr = ^SVien; SVien = RECORD maso: STRING[6]; hoten: STRING[23]; dtb: REAL; next: SVienPtr END;VAR first, last: SVienPtr; chon: BYTE; traloi: CHAR;PROCEDURE Bosung;VAR p: SVienPtr; ans: INTEGER;BEGIN WHILE TRUE DO BEGIN new(p); WITH p^ DO BEGIN write(Ma sinh vien : ); readln(maso); write(Ho va ten : ); readln(Hoten); write(Diem trung binh: ); readln(dtb); END; p^.next:=NIL; IF first=NIL THEN BEGIN first:= p; last:= p END ELSE BEGIN last^.next:= p; last:= p END; write(Co tiep tuc khong 1/0 ? ); readln(ans); IF ans=0 THEN break; END;END;PROCEDURE DuyetXuoi;VAR p: SVienPtr;BEGIN IF first = NIL THEN BEGIN writeln(D.sach rong); exit END; p := first; WHILE p NIL DO BEGIN WITH p^ DO writeln(maso:5, ,Hoten:25, ,dtb:5:2); p := p^.Next; END;END;PROCEDURE ChenSau;VAR q,p: SVienPtr; found: BOOLEAN; masv: STRING[6];BEGIN IF first NIL THEN BEGIN write(Ma so SV can tim de chen : ); readln(masv); p:= first; found:= FALSE; WHILE (pNIL) AND (NOT found) DO IF p^.maso=masv THEN found := TRUE ELSE p:=p^.next; IF found THEN BEGIN new(q); WITH q^ DO BEGIN write( Ma so : ); readln(maso); write( Ho ten : ); readln(Hoten); write( Diem trung binh : ); readln(dtb); END; q^.next:= p^.next; p^.next:= q; END ELSE BEGIN write(Khong tim thay); readln END; END;END;PROCEDURE TimXoa;VAR masv: STRING[6]; found: BOOLEAN; p,q: SVienPtr;BEGIN write(Ma so SV can loai khoi danh sach : ); readln(masv); p:= first; IF pNIL THEN BEGIN found:= FALSE; WHILE (pNIL) AND (NOT found) DO IF p^.maso=masv THEN found := TRUE ELSE BEGIN q:=p; p:=p^.next END; IF found THEN BEGIN IF p=first THEN first :=p^.next ELSE q^.next:=p^.next; IF p^.next=NIL THEN last:=q; dispose(p) END ELSE BEGIN write(Khong tim thay); readln END; END;END;BEGIN clrscr; First := NIL; REPEAT writeln; writeln(1. Bo sung mot sinh vien); writeln(2. Duyet danh sach sinh vien); writeln(3. Tim kiem mot phan tu va chen vao sau); writeln(4. Tim kiem mot phan tu va xoa); writeln(5. Ket thuc chuong trinh); writeln; write(Chon chuc nang: ); readln(chon); writeln; CASE chon OF 1: Bosung; 2: DuyetXuoi; 3: ChenSau; 4: TimXoa; END; UNTIL chon=5; WHILE firstNIL DO BEGIN last:= first; first:= first^.next; dispose(last) END;END.2. Danh sách liên kết képDanh sách liên kết kép là danh sách mà mỗi phần tử của nó gồm ba thành phần:phần dữ liệu, con trỏ next chứa địa chỉ phần tử tiếp sau, con trỏ prev chứa địa chỉcủa phần tử liền trước, con trỏ next của phần tử cuối cùng trong danh sách bằngNIL, con trỏ prev của phần tử đầu tiên cũng bằng NIL. Danh sách liên kết képhoàn toàn xác định bởi hai con trỏ: con trỏ firstchứa địa chỉ phần tử đầu tiên, contrỏ last chứa địa chỉ phần tử cuối cùng. Danh sách liên kết kép cho phép dễ dàngxác định phần tử đứng trước một phần tử đã biết, do đó nó thuận tiện hơn d ...
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin cấu trúc dữ liệu lý thuyết đồ thị Javascript ASP.NET Tin học đại cương giáo trình Tin học đại cương bài giảng Tin học đại cương tài liệu Tin học đại cương lý thuyết Tin học đại cươngTài liệu có liên quan:
-
52 trang 468 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 367 0 0 -
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 360 0 0 -
96 trang 334 0 0
-
74 trang 329 0 0
-
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 321 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 321 1 0 -
Ứng dụng công cụ Quizizz thiết kế trò chơi học tập trong giảng dạy học phần tin học đại cương
12 trang 310 0 0 -
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 304 0 0 -
Tài liệu hướng dẫn sử dụng thư điện tử tài nguyên và môi trường
72 trang 302 0 0