Ôn tập các loại cấu trúc dữ liệu Cấu trúc dữ liệu kiểu mảng ARRAY Cấu trúc dữ liệu danh sách LIST Cấu trúc dữ liệu kiểu STACK Danh sách kiểu hàng đợi QUEUE Khỏi niệm Mảng là một tập hợp
Trang 1Ôn tập các loại cấu trúc dữ liệu
Cấu trúc dữ liệu kiểu mảng (ARRAY) Cấu trúc dữ liệu danh
sách (LIST)
Cấu trúc dữ
liệu kiểu STACK
Danh sách kiểu hàng đợi (QUEUE)
Khỏi
niệm
Mảng là một tập hợp có thứ tự
bao gồm một số lợng cố định
các phần tử,được truy cập với
cùng một tên
Danh sách là một tập hợp gồm nhiều phần
tử có tính chất cấu trúc thứ tự giữa các phần tử với nhau : nếu biết đợc phần tử trớc thì sẽ biết đợc
vị trí của phần tử
đứng sau
Ngời ta thờng biểu diễn danh sách thành một dãy các phần tử
đợc phân cách nhau bởi dấu phảy
Stack là một kiểu danh sách tuyến tính đặc biệt mà việc bổ sung hay loại một phần tử chỉ thực hiện ở một
đầu gọi là đỉnh (Top)
Queue là kiểu danh sách tuyến tính mà phép bổ sung một phần tử đợc thực hiện ở một đầu gọi là lối sau (Rear) còn phép loại bỏ một phần tử thực hiện ở một đầu khác gọi
là lối trớc (Front) Queue còn đợc gọi là danh sách kiểu FIFO (First In First Out)
Phương
phỏp
lưu trữ
Có hai phơng pháp lu trữ
mảng hai chiều:
1, Lu trữ theo dòng (nh
trong BASIC, PASCAL)
Trong cấu trúc lu trữ theo
dòng trớc hết ngời ta lần lợt
l-u trữ các thành phần của
dòng thứ nhất , tiếp đó là
các thành phần của dòng thứ
hai, dòng thứ 3 vv cho đến
dòng cuối cùng
Các phần tử của danh sách có thể
đợc sắp xếp thứ tự tuyến tính theo vị trí của chúng trong danh sách Ta nói , phần tử ai đứng trớc phần tử ai+1 (i =1,2,3, n-1) Ta
Lu trữ Stack kế tiếp bằng một mảng.Vì
Stack là một dãy các mục dữ liệu chúng
ta có thể dùng mảng
để lu trữ các mục này Mỗi phần tử của ngăn xếp chiếm một vị trí trong mảng và vị trí thứ
Phơng pháp tuyến tính
Trong trờng hợp này Queue
đợc lu trữ trong một véc tơ
lu trữ Q có n phần tử Để có thể truy nhập vào Queue ta dùng hai biến con trỏ:
Biến R trỏ vào lối sau của queue
Biến F trỏ vào lối trớc của queue
Nếu queue rỗng thì R = 0
Trang 22, Lu trữ theo cột ( nh
trong FORTRAN )
Đối với trờng hợp lu trữ theo
cột, các phần tử của mảng sẽ
đợc lu trữ liên tiếp bắt đầu
từ cột thứ nhất sau đó sang
cột thứ hai, cột thứ ba vvv
cho đến hết cột cuối cùng
của mảng
cũng nói rằng phần
tử ai có vị trí thứ i trong cấu trúc của danh sách
nhất phục vụ nh là
đỉnh của Stack.Giả
sử ta muốn lu trữ
Stack bằng véc tơ
l-u trữ S(n) gồm n phần tử Gọi Top là
địa chỉ phần tử
đỉnh của Stack, Top là một biến
động Khi Stack rỗng ta qui ớc Top=0; khi Stack bị
"tràn" (overflow) thì
Top = n Giả sử mỗi phần tử của stack chiếm một từ máy
Khi bổ sung một phần tử thì Top: = Top+1, khi loại bỏ một phần tử thì
Top: = Top - 1
& F=0
Giả sử mỗi phần tử của queue chứa trong 1 từ máy thì khi bổ xung thêm một phần tử R: = R + 1
Còn khi loại một phần tử thì F: = F + 1
Lu trữ Queue bằng danh sách nối vòng
Queue đợc lu trữ bởi véc tơ
lu trữ Q có n phần tử, F và
R là hai con trỏ, trỏ vào lối trớc và lối sau của nó
Để cài đặt một hàng đợi chúng ta dùng một bản ghi gồm một mảng nối vòng để chứa các phần tử của hàng
đợi và các trờng Front và Rear để ghi lại vị trí của phần tử đầu và vị trí sau phần tử cuối cùng
Cỏc giải
thuật cơ
bản
Mảng một chiều
Giải thuật tạo lập mảng một
chiều.
Giải thuật sắp xếp mảng
một chiều
Giải thuật tìm kiếm trong
mảng một chiều
Giải thuật tính toán trong
Tìm kiếm
Bổ sung Loại bỏ Thay thế phần tử Tách một danh sách
thành nhiều danh sách Ghép nhiều danh
Giải thuật Loại bỏ một phần tử khỏi stack
Giải thuật xác định Stack rỗng
Giải thuật Bổ sung Giải thuật tạo lập
Stack
Giải thuật tạo lập Queue Giải thuật kiểm tra Queue rỗng
Giải thuật chèn vào Queue Giải thuật loại khỏi Queue
Trang 3mảng một chiều
Mảng hai chiều ( Ma trận)
Giải thuật tạo lập mảng hai
chiều
Giải thuật tìm kiếm
Giải thuật nhân mảng hai
chiều với một véctơ
Giải thuật cộng mảng hai
chiều
Giải thuật nhân mảng hai
chiều với mảng hai chiều
sách thành một danh sách Trộn nhiều danh
sách thành một danh sách mới Sắp xếp thứ tự một
danh sách
Cấu trúc dữ liệu danh sách liên kết
Danh sách liên kết là một loại cấu trúc dữ liệu đơn giản và thích hợp hơn với các phép toán thêm , loại bỏ , ghép, tách so với danh sách đặc
Danh sách liên kết rất thích hợp cho các phép toán bổ sung , loại bỏ phần tử
Chúng đợc nối với nhau nhờ vào vùng liên kết : vùng liên kết của phần tử thứ nhất chứa địa chỉ của phần tử thứ hai , vùng liên kết của phần tử thứ hai chứa địa chỉ của phần tử thứ ba và cứ nh thế đến phần tử cuối cùng Vùng liên kết của phần tử cuối cùng là Nil
Danh sách liên kết không phải là cấu trúc dữ liệu có sẵn trong đa số các ngôn ngữ lập trình Vì vậy phải cài đặt danh sách liên kết bằng cách dùng các cấu trúc dữ liệu khác
kết đối xứng Khái
niệm
Danh sách liên kết đơn là một danh sách mà các phần tử của nó có 1 vùng liên kết
Có 2 loại danh sách liên kết đơn là danh sách trên cơ sở mảng và trên cơ
sở biến con trỏ
Danh sách liên kết đối xứng là một danh sách mà các phần tử của nó có hai vùng liên kết
Trang 4Ph-ơng
pháp
lu trữ
Để lu trữ danh sách loại này, mỗi phần tử của nó sẽ đợc lu trữ trong một nút (node) Mỗi nút bao gồm một số từ máy liên tiếp nhau, nhng bản thân các nút thì có thể nằm rải rác trong bộ nhớ.
Cấu trúc mỗi nút gồm hai phần : Phần dữ liệu Data và Phần liên kết chỉ phần tử đứng sau nó
Nút cuối cùng kết thúc danh sách móc nối và ký hiệu là 0 hoặc Nil
Dat a
Nex t
Trong mỗi nút ngoài phần Data còn có hai con trỏ: một trỏ đến nút đứng
tr-ớc nó và một trỏ đến nút
đứng sau
Lptr Data Rptr Lptr của nút cực trái và Rptr của nút cực phải là Nil Ta dùng hai con trỏ L
và R để truy nhập vào danh sách theo cả hai chiều, L trỏ tới nút cực trái
và R trỏ vào nút cực phải Khi danh sách rỗng ta qui
-ớc L = Nil & R = Nil
DSLK trên cơ sở mảng DSLK trên cơ sở biến con
trỏ
Cấu trúc l u trữ: Trờng dữ liệu
l-u trữ một phần tử của danh sách, còn trờng liên kết sẽ chỉ đến phần tử đứng sau nó bằng cách
lu trữ chỉ số của nó trong mảng
Ngoài ra ,một biến List sẽ chỉ
đến phần tử đầu tiên bằng cách
lu trữ chỉ số của nó trong mảng
Cấu trúc l u trữ: Trờng Data có kiểu
thích hợp để lu trữ một phần tử của danh sách , còn trờng Next sẽ chứa một liên kết chỉ đến phần tử đứng sau
Tuy nhiên , khác với cách cài đặt trên cơ sở mảng, liên kết này sẽ là con trỏ chứ không phải là chỉ số trong mảng
Các
giải
thuật
cơ
bản
Tạo lập Kiểm tra danh sách liên kết rỗng Chèn item vào đầu danh sách Khởi động vùng các nút tự do trong danh sách
Trả lại con trỏtrong danh sách Quét danh sách liên kết lu trữ
bằng mảng Chèn thêm nút mới vào danh sách liên kết lu trữ bằng mảng
Xoá một nút từ danh sách liên kết
lu trữ bằng mảng
Giải thuật tạo lập Giải thuật Kiểm tra danh sách rỗng Giải thuật thêm item vào đầu danh sách
Giải thuật duyệt qua một danh sách Giải thuật bổ sung một nút mới vào danh sách
Giải thuật loại bỏ phần tử Giải thuật ghép nối hai danh sách Giải thuật tách danh sách
Giải thuật bổ sung phần
tử Giải thuật loại bỏ một phần tử
Giải thuật ghép danh sách liên kết đối xứng
Giải thuật tách danh sách liên kết đối xứng
Ngoài ra, danh sách liên kết còn có cấu trúc dữ liệu kiểu
Trang 5Stack vµ Queue liªn kÕt
Trong gi¸o tr×nh cßn 2 lo¹i cÊu tróc liªn kÕt C©y vµ §å thÞ.