Đảo ngược mối liên kết của các phần tử trong d/s (1đ)

Một phần của tài liệu Bài những đề thi và lời giải chi tiết cấu trúc dữ liệu (Trang 94 - 97)

- ngược với thứ tự nhập vào + Hủy một phần tử bất kỳ trong đa thức

2)Đảo ngược mối liên kết của các phần tử trong d/s (1đ)

+ Giả sử L là con trỏ trỏ tới nút đầu tiên trong danh sách. + Để có thể đảo ngược danh sách ta làm như sau:

1. L1:=nil; { khởi tạo danh sách L1 rỗng}

2. Loại bỏ phần tử đầu tiên của danh sách L, p trỏ tới phần tử này 3. Gắn p vào L1: p^.next:=L1, L1:=p

Lặp đi lặp lại bước 3 cho đến khi danh sách L rỗng; L:=L1

Câu 2

1)Biểu diễn đa thức (1 đ)

type list=^nut; nut = record heso: real; somu: integer; next:list; end; var L: list; 2) Các chương trình con

Cách làm:

1. Giả sử đa thức là một danh sách có nút đầu được trỏ bởi L 2. Sắp xếp đa thức giảm dần theo số mũ

3. duyệt đa thức từ đầu đến cuối, xét 2 nút kế tiếp trong danh sách L: + nếu cùng số mũ thì cộng hệ số của 2 nút lại:

 nếu tổng = 0, thì loại bỏ 2 nút đó khỏi danh sách L

 Nếu tổng khác 0, thì lặp lại bước 3 cho đến khi gặp nút có hệ số khác nó thì: loại bỏ các nút có cùng số mũ ra khỏi L, gắn vào danh sách L1

+ Nếu khác số mũ, thì tách nút đứng trước ra khỏi L, gép vào L1 4. Lặp đi lặp lại bước 3 cho đến khi L rỗng; L:=L1

ý 2) Cách làm(1 đ)

a) Giả sử cần tính tổng 2 đa thức có các nút đầu được trỏ bởi con trỏ A,B

- Sử dụng 2 con trỏ p,q di chuyển đến các nút của 2 danh sách A,B từ đầu đến cuối: p:=A; q:=B; {xuất phát từ nút đầu tiên-

+ Nếu p^.somu=q^.somu, thì:

 Cộng 2 hệ số tương ứng của 2 nút được trỏ bởi p, q: tong:=p^.heso + q^.heso

 Nếu tong=0, p:=p^.next; q:=q^.next;

 Nếu tong <>0 thì m^.heso:=tong, m^.somu:=p^.somu; gắn m vào cuối danh sách có nút đầu được trỏ bởi C, khởi tạo C:=nil

+ Nếu p^.somu>q^.somu, thì: m^.heso:= p^.heso; m^.somu:=p^.somu; gắn m vào cuối danh sách C; p:=p^.next

+ Nếu p^.somu<q^.somu, thì : m^.heso:= q^.heso; m^.somu:=q^.somu; gắn m vào cuối danh sách C; q:=q^.next

+ Nếu một trong 2 danh A, B kết thúc trước, thì gắn phần còn lại của danh sách chưa kết thúc vào cuối danh sách C

 C chính là đa thức tổng b) Tính hiệu: cách làm tương tự như tính tổng

c) tính tích: , tách từng nút của danh sách A, nhân với các nút tương ứng của danh sách B, công các đa thức thành phần lại

ý 3 cách làm: (1 đ)

duyệt toàn bộ đa thức từ đầu đến cuối, duyệt đến nút nào, hiển thị hệ số và số mũ của nút đấy

Câu 3

Ví dụ: Cấu trúc dữ liệu danh sách, Có thể cài đặt danh sách bởi con trỏ(1 đ)

Ưu điểm:

- Không gây hiện tượng lãng phí bộ nhớ (Hiện tượng giữ chỗ để đấy mà không dùng đến như danh sách cài đặt bởi mảng) (adsbygoogle = window.adsbygoogle || []).push({});

- Cấu trúc dữ liệu danh sách cài đặt bởi con trỏ còn gọi là cấu trúc dũ liệu động, không gian bộ nhớ được cấp phát trong heap, do đó nó không bị giới hạn bởi kích thước 64kb như đối với cấu trúc dữ liệu tĩnh

- Các phần tử trong danh sách nằm ở những vị trí dải dác, do đó tận dụng được những không gian trống này, mà không cần một vùng nhớ kế tiếp như cài đặt bởi mảng

Nhược điểm:

- Tốc độ truy cập đến các phần tử trong danh sách là chậm, không đồng đều đối với mọi phần tử (truy cập tuần tự một chiều)

- Từ phần tử trước không truy cập ngược lại phần tử đứng trước

- mỗi phần tử trong danh sách tốn thêm một không gian là 4byte để lưu địa chỉ của phàn tử đứng sau nó trong danh sách

hoặc cài đặt danh sách bởi mảng: (1 đ)

b. Ưu điểm

1) truy cấp đến các phần tử là trực tiếp do đó nhanh và đồng đều đối với mọi phần tử

2) Các thao tác thực hiện tương đối dễ dàng c. nhược điểm

1) Có hiện tượng dư thừa bộ nhớ: Hiện tượng giữ chỗ để đấy mà không dùng tới

2) Bị hạn chế bởi không gian kế tiếp trong bộ nhớ

3) Là cấu trúc dữ liệu tĩnh, bị giới hạn không gian bộ nhớ trong thanh ghi dữ liệu và thanh ghi stack

Một phần của tài liệu Bài những đề thi và lời giải chi tiết cấu trúc dữ liệu (Trang 94 - 97)