1. Trang chủ
  2. » Giáo Dục - Đào Tạo

cấu trúc dữ liệu Chương 4

46 146 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 46
Dung lượng 430,76 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

tài liệu uy tín được biên soạn bởi giảng viên đại học Bách Khoa TPHCM, thuận lợi cho qua trình tự học, nghiên cứu bộ tự động hóa, điện tử, cơ điện tử, cơ khí chế tạo máy, lập trình nhúng, Tài liệu được kiểm duyệt bởi giảng viên, phòng đào tạo trường đại học bách khoa, lưu hành nội bộ

Trang 1

Chương 4

Danh sách

Trang 3

Các định nghĩa

f Danh sách (list) là một tập hợp rỗng hoặc gồm nhiều phần tử a1, a2, …, a n mà tính chất cấu trúc của nó là mối liên hệ tương đối giữa các phần tử với nhau: biết được phần từ a i thì sẽ biết được vị trí của phần tử a i+1.

f Chiều dài (length) của danh sách là số lượng

phần tử của danh sách.

f Danh sách rỗng (empty list) là danh sách có

chiều dài bằng 0 (không có phần tử nào cả).

Trang 4

Các tác vụ trên danh sách

Trang 5

Danh sách đặc

™ Định nghĩa

f Danh sách đặc (condensed list) là một danh

sách mà các phần tử được sắp xếp kế tiếp nhau trong bộ nhớ: đứng ngay sau vị trí của

Trang 7

Danh sách đặc

™ Khởi tạo danh sách rỗng

procedure List_Init ( var List: list_type);

Trang 8

Danh sách đặc

™ Kiểm tra danh sách đầy

function List_Full (List: list_type): boolean;

Trang 10

Danh sách đặc

procedure List_Insert

( var List: list_type; x: integer);

var i, j: integer; cont: boolean;

begin

i := 1; cont := true;

while (i <= List.n) and cont do

if List.info[i] < x then i := i + 1

else cont := false;

for j := List.n downto i do

Trang 12

Danh sách đặc

procedure List_Delete

( var List: list_type; x: integer);

var i, j: integer; found: boolean;

Trang 13

Danh sách đặc

thứ tự tăng dần: tìm kiếm tuần tự.

function List_Search

(List: list_type; x: integer): integer;

var i: integer; found: boolean;

Trang 14

Danh sách đặc

thứ tự tăng dần: tìm kiếm nhị phân.

function List_Search

(List: list_type; x: integer): integer;

var i, j, k: integer; found: boolean;

begin

i :=1; j := List.n; found := false;

while (i <= j) and not found do

Trang 17

Danh sách liên kết

™ Định nghĩa

f Danh sách liên kết (linked list) là một danh

sách mà các phần tử được nối kết với nhau nhờ vào các vùng liên kết của chúng: vùng liên kết của a i chứa địa chỉ của a i+1.

Trang 19

Danh sách liên kết

procedure List_Init ( var Head: lptr);

Trang 21

Danh sách liên kết

procedure List_Insert (Head: lptr; x: integer);

var b, p, q: lptr; cont: boolean;

begin

b := Head; p := b^.next; cont := true;

while (p <> nil) and cont do

if p^.info < x then

begin

b := p; p := p^.next

end else cont := false;

Trang 22

b p

Trang 23

Danh sách liên kết

procedure List_Delete (Head: lptr; x: integer);

var b, p: lptr; found: boolean;

begin

b := Head; p := b^.next; found := false;

while (p <> nil) and not found do

Trang 24

Danh sách liên kết

thứ tự tăng dần.

function List_Search (Head: lptr; x: integer): ptr;

var p: lptr; found: boolean;

begin

p := Head^.next; found := false;

while (p <> nil) and not found do

if p^.info < x then p := p^.next

else if p^.info = x then found := true

Trang 25

Danh sách liên kết

function List_Empty (Head: lptr): boolean;

Trang 26

Danh sách liên kết kép

f Danh sách liên kết kép (doubly linked list) là

một danh sách liên kết mà mỗi phần tử có hai vùng liên kết: một vùng liên kết chỉ đến phần

tử đứng ngay trước nó (được gọi là liên kết ngược) và một vùng liên kết chỉ đế phần tử đứng ngay sau nó (được gọi là liên kết thuận).

next

a i previous info

Trang 27

Danh sách liên kết kép vòng

Head

Trang 29

Danh sách liên kết kép vòng

procedure Dlist_Init ( var Head: dlptr);

Trang 30

Danh sách liên kết kép vòng

function Dlist_Empty (Head: dlptr): boolean;

Trang 31

5

q p

b

Trang 32

Danh sách liên kết kép vòng

procedure Dlist_Insert (Head: dlptr; x: integer);

var b, p, q: dlptr; cont: boolean;

begin

p := Head^.next; cont := true;

while (p <> Head) and cont do

Trang 33

a

Trang 34

Danh sách liên kết kép vòng

procedure Dlist_Delete (Head: dlptr; x: integer);

var b, p, q: dlptr; found: boolean;

begin

p := Head^.next; found := true;

while (p <> Head) and cont do

if p^.info < x then p := p^.next

else if p^.info = x then found := true

Trang 35

f Hàng còn được gọi là danh sách FIFO

(First-In First-Out): vào trước ra trước.

Trang 36

front, rear: qptr

end ;

Trang 39

new(p); p^.info := x, p^.next := nil;

if Queue.rear = nil then Queue.front := p

Trang 41

f Chồng (stack) là một danh sách mà cả hai

phép thêm vào và phép loại bỏ đều được thực hiện ở cùng một đầu.

f Chồng còn được gọi là danh sách LIFO

(Last-In First-Out) hoặc pushdown list: vào sau ra

trước.

Trang 45

p

Trang 46

p

Ngày đăng: 03/02/2018, 08:23

TỪ KHÓA LIÊN QUAN