BÀI TẬP CHƯƠNG

Một phần của tài liệu giáo trình cấu trúc dữ liệu (Trang 63 - 69)

DANH SÁCH LIấN KẾT 4.1 Giới thiệu

BÀI TẬP CHƯƠNG

Bài tập lý thuyết

1- Phõn tớch ưu, khuyết điểm của xõu liờn kết so với mảng. Tổng quỏt hoỏ cỏc trường hợp nờn dựng xõu liờn kết.

2- Xõy dựng một cấu trỳc dữ liệu thớch hợp để biểu diễn đa thức P(x) cú dạng:

P(x) = c1xn-1 + c2xn-2 + ... + ckxn-k Biết rằng:

- Cỏc thao tỏc xử lý trờn đa thức bao gồm: + Thờm một phần tử vào cuối đa thức

+ In danh sỏch cỏc phần tử trong đa thức theo: • Thứ tự nhập vào

• Ngược với thứ tự nhập vào

+ Huỷ một phần tử bất kỳ trong danh sỏch - Số lượng cỏc phần tử khụng hạn chế

- Chỉ cú nhu cầu xử lý đa thức trong bộ nhớ chớnh. Giải thớch lý do chọn CTDL đó định nghĩa.

Viết chương trỡnh con ước lượng giỏ trị của đa thứcP(x) khi biết x. Viết chương trỡnh con rỳt gọn biểu thức (gộp cỏc phần tử cựng số mũ) 3- Hóy cho biết nội dung của stack sau mỗi thao tỏc trong dóy:

EAS*Y**QUE***ST***I*ON

Với một chữ cỏi tượng trưng cho thao tỏc thờm chữ cỏi tương ứng vào stack, dấu * tượng trưng cho thao tỏc lấy nội dung một phần tử trong stack in lờn màn hỡnh.Hóy cho biết sau khi hoàn tất chuỗi thao tỏc, những gỡ xuất hiện trờn màn hỡnh?

4- Hóy cho biết nội dung của hàng đợi sau mỗi thao tỏc trong dóy: EAS*Y**QUE***ST***I*ON

Với một chữ cỏi tượng trưng cho thao tỏc thờm chữ cỏi tương ứng vào hàng đợi, dấu * tượng trưng cho thao tỏc lấy nội dung một phần tử trong

hàng đợi in lờn màn hỡnh.Hóy cho biết sau khi hoàn tất chuỗi thao tỏc, những gỡ xuất hiện trờn màn hỡnh?

Bài tập thực hành

1. Viết khai bỏo và cỏc thủ tục cài đặt danh sỏch bằng mảng. Dựng cỏc thủ tục này để viết:

a. Thủ tục nhận một dóy cỏc số nguyờn nhập từ bàn phớm và lưu trữ trong danh sỏch theo thứ tự nhập vào.

b. Thủ tục nhận một dóy cỏc số nguyờn nhập từ bàn phớm và lưu trữ trong danh sỏch theo thứ tự ngược với thứ tự nhập vào.

c. Viết thủ tục in ra màn hỡnh cỏc phần tử trong danh sỏch theo thứ tự trong danh sỏch.

2. Tương tự như bài tập 1. nhưng cài đặt bằng con trỏ.

3. Viết thủ tục thờm một phần tử trong danh sỏch liờn kết đó cú thứ tự sao cho ta vẫn cú một danh sỏch cú thứ tự.

4. Viết cỏc chương trỡnh con: EmptyQ, CreateQ, AddQ, RemoveQ để a. Tỡm phần tử ở cuối hàng đợi, để lại hàng đợi rỗng.

b. Tỡm phần tử thứ n của hàng đợi, làm cho hàng đợi khụng cũn n phần tử đầu tiờn.

c. Tỡm phần tử ở đầu hàng đợi nhưng khụng xoỏ nú khỏi hàng đợi d. Tỡm phần tử thứ n của hàng đợi nhưng khụng làm thay đổi giỏ trị của hàng đợi.

5. Dựng cỏc phộp toỏn cơ bản của Stack và Queue viết một thuật toỏn đảo ngược cỏc phần tử của hàng đợi.

6. Mụ phỏng việc tạo buffer in một file ra mỏy in.

Buffer xem như là một hàng, khi ra lệnh in file mỏy tớnh sẽ thực hiện một cỏch lặp quỏ trỡnh sau cho đến hết file:

- éưa nội dung của tập tin vào buffer cho đến khi buffer đầy hoặc hết file. - In nội dung trong buffer ra mỏy in cho tới khi hàng rỗng.

Hóy mụ phỏng quỏ trỡnh trờn để in một file văn bản lờn từng trang màn hỡnh.

1 2 ... nA A (adsbygoogle = window.adsbygoogle || []).push({});

C

B

7. Cơ cấu đường tầu tại một ga xe lửa như sau:

Ban đầu ở đường day A chứa cỏc toa tầu đỏnh số từ 1 đến n theo thứ tự từ trỏi qua phải (Hỡnh vẽ), người ta muốn chuyển cỏc toa đú sang đường day C để được một thứ tự mới là một hoỏn vị của (1, 2, ..., n). Chỉ được đưa cỏc toa tầu trờn đường day theo hướng mũi tờn, cú thể dựng đường day B như một đường day trung gian chứa tạm cỏc toa tầu trong quỏ trỡnh di chuyển, khi đú đường day B đúng vai trũ như một ngăn xếp.

a. Hóy nhập vào một hoỏn vị cần cú, cho biết là cú phương ỏn thực hiện hay khụng, nếu cú trỡnh bày cỏch chuyển:

Vớ dụ với n = 4, Hoỏn vị cần cú là (1, 4, 3, 2) Trả lời cú, thứ tự phương ỏn chuyển:

- A  C (Chuyển toa đầu tiờn trờn đường day A sang đường day B) - A  B - A  B - A  C - A  C - A  C

b. Tỡm tất cả cỏc hoỏn vị cú thể được với n = 4, những hoỏn vị nào là khụng thể được. Tương tự với n = 5.

c. Một cỏch tổng quỏt, những hoỏn vị nào của dóy 1, 2, ..., n ban đầu cú thể nhận được khi sử dụng ngăn xếp như thế này. ()

8. Tương tự như bài toỏn 7, nhưng với sơ đồ đường day như sau: (Ở đõy đường day phụ đúng vai trũ như là một hàng đợi)

1 2 ... n

AC C

Chương 5:

CÂY (TREE)

Cõy là một tổ chức phõn cấp (hierarchy) trờn tập hợp cỏc phần tử. Cõy được dựng trong nhiều ngành khoa học khỏc nhau để biểu diễn cỏc cấu trỳc phõn cấp, chẳng hạn, sơ đồ tổ chức bộ mỏy nhà nước từ trung ương xuống cơ sở như tỉnh, huyện, xó... Trong khoa học mỏy tớnh, cõy dựng để tổ chức thụng tin trong cơ sở dữ liệu, tổ chức chỉ mục, tổ chức cỏc cấu trỳc lưu trữ tri thức (knowledge) của cỏc hệ chuyờn gia (expert system)...

Trong chương này chỳng ta sẽ tỡm hiểu cỏc thuật ngữ cơ bản cựng với một số phộp toỏn chung nhất trờn cõy, tỡm hiểu về cỏc phộp duyệt cõy. Ta cũng sẽ nghiờn cứu cõy nhị phõn, đú là một trường hợp đơn giản nhất của cõy. Kế đến chỳng ta sẽ tỡm hiểu giải thuật Huffman để mó hoỏ kớ tự như là một ứng dụng của cõy nhị phõn. Giải thuật này cú thể dựng để viết cỏc chương trỡnh nộn dữ liệu. Ở cuối chương, chỳng tụi sẽ trỡnh bày cấu trỳc cõy tỡm kiếm nhị phõn như là một ứng dụng lưu trữ và tỡm kiếm dữ liệu dựa trờn cấu trỳc cõy.

5.1. Khỏi niệm

Cõy là một tập hợp hữu hạn cỏc phần tử gọi là nỳt (nodes) trong đú cú một nỳt được đặc biệt gọi là nỳt gốc (root). Giữa cỏc nỳt cú một mối quan hệ phõn cấp, gọi là mối quan hệ cha - con (parenthood), xỏc định hệ thống cấu trỳc trờn cỏc nỳt. Mỗi nỳt, trừ nỳt gốc, cú duy nhất một nỳt cha. Một nỳt cú thể cú nhiều nỳt con hoặc khụng cú nỳt con nào. Mỗi nỳt biểu diễn một phần tử trong tập hợp đang xột và nú cú thể cú một kiểu nào đú bất kỳ, thường ta biểu diễn nỳt bằng một kớ tự, một chuỗi hoặc một số ghi trong vũng trũn. Mối quan hệ cha con được biễu diễn theo qui ước nỳt cha ở dũng trờn nỳt con ở dũng dưới và được nối bởi một đoạn thẳng. Một cỏch hỡnh thức ta cú thể định nghĩa cõy một cỏch đệ qui như sau:

* Một nỳt đơn độc là một cõy. Nỳt này cũng chớnh là nỳt gốc của cõy. * Giả sử ta cú n là một nỳt đơn độc và k cõy T1,.., Tk với cỏc nỳt gốc tương ứng là n1,.., nk thỡ cú thể xõy dựng một cõy mới bằng cỏch cho nỳt n là cha của cỏc nỳt n1,.., nk. Cõy mới này cú nỳt gốc là nỳt n và cỏc

cõy T1,.., Tk được gọi là cỏc cõy con. Tập rỗng cũng được coi là một cõy và gọi là cõy rỗng kớ hiệu ^. (Nhưng trong khuụn khổ giỏo trỡnh này ta khụng xột trường hợp này)

Vớ dụ: Xột mục lục của một quyển sỏch. Mục lục này cú thể xem là một cõy

Nếu n1, n2, ..., nk là một chuỗi cỏc nỳt trờn cõy sao cho ni là nỳt cha của nỳt ni+1, với i=1..k-1, thỡ chuỗi này gọi là một đường đi trờn cõy (hay ngắn gọn là đường đi ) từ n1 đến nk. éộ dài đường đi này được định nghĩa bằng số nỳt trờn đường đi trừ 1. Như vậy độ dài đường đi từ một nỳt đến chớnh nú bằng khụng, và luụn tồn tại duy nhất một đường đi từ nỳt gốc đến một đỉnh bất kỳ trong cõy.

Nếu cú đường đi từ nỳt a đến nỳt b thỡ ta núi a là tiền bối (ancestor)

của b, cũn b gọi là hậu duệ (descendant) của nỳt a. Rừ ràng một nỳt vừa là tiền bối vừa là hậu duệ của chớnh nú. Tiền bối hoặc hậu duệ của một nỳt khỏc với chớnh nú gọi là tiền bối hoặc hậu duệ thực sự. Trờn một cõy nỳt gốc khụng cú tiền bối thực sự. Một nỳt khụng cú hậu duệ thực sự gọi là nỳt lỏ (leaf). Nỳt khụng phải là lỏ ta cũn gọi là nỳt trung gian (interior). Cõy con của một cõy là một nỳt cựng với tất cả cỏc hậu duệ của nú.

Số cỏc nỳt con của một nỳt được gọi là cấp (hay cũn gọi là bậc) của nỳt đú, Nỳt cú cấp bằng 0 là nỳt lỏ hay nỳt tận cựng. Cấp cao nhất của một nỳt trờn cõy gọi là cấp của cõy đú. Ta gỏn gốc của cõy là mức 1, cỏc nỳt con của nỳt gúc là mức 2, một cỏch tổng quỏt: nếu nỳt cha cú mức là i thỡ cỏc nỳt con cú mức là i + 1.

Vớ dụ:

Chiều cao (Height) của cõy hay chiều sõu (Depth) của một cõy là số mức lớn nhất của nỳt trờn cõy đú. Cõy ở trờn cú chiều cao là 4.

Cõy gỏn nhón là cõy mà mỗi nỳt của nú được gắn với một giỏ trị (Nhón) nào đú. Chỳng ta coi nhón như những thụng tin liờn kết với mỗi đỉnh của cõy. Nhón cú thể là cỏc dữ liệu đơn như số nguyờn, số thực, ký tự ... hay cũng cú thể là cỏc dữ liệu phức tạp. Trờn một cõy cú thể cú cỏc đỉnh khỏc nhau nhưng cú nhón như nhau.

Một tập hợp cỏc cõy riờng biệt được gọi là một rừng (Forest), Một cõy mà bỏ nỳt gốc cũng tạo thành một rừng cỏc cõy con.

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu giáo trình cấu trúc dữ liệu (Trang 63 - 69)