1. Trang chủ
  2. » Tất cả

Chuong2 cau truc du lieu 1 5 2002

20 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Cấu trúc dữ liệu
Trường học Trường Đại học Công Nghệ Thông Tin - Đại học Quốc Gia Hà Nội
Chuyên ngành Kỹ thuật phần mềm
Thể loại Báo cáo môn học
Năm xuất bản 2002
Thành phố Hà Nội
Định dạng
Số trang 20
Dung lượng 225,84 KB

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

Nội dung

Microsoft Word CHUONG2 cau truc du lieu 1 5 2002 doc Chöông 2 Caáu truùc döõ lieäu 49 Chöông 2 CAÁU TRUÙC DÖÕ LIEÄU Chöông 2 49 CAÁU TRUÙC DÖÕ LIEÄU 49 1 Thoâng tin vaø döõ lieäu 50 1 1 Thoâng tin laø[.]

Trang 1

Chương 2:

CẤU TRÚC DỮ LIỆU

Chương 2: 49

CẤU TRÚC DỮ LIỆU 49

1 Thông tin và dữ liệu 50

1.1.Thông tin là gì ? 50

1.2.Vai trò cuả thông tin 50

1 3 Dữ liệu 52

2.CẤU TRÚC DỮ LIỆU 55

2.1 Mảng (array) 56

2 2.Danh sách ( Odered list) 60

2 3 Cây (tree) 60

2.4 - Sấp (pile) 61

2 5.Hàng đợi (Queue) 62

2 6.Biểu ghi (Record) 62

2.7.Tệp (file) 63

Trang 2

1 Thông tin và dữ liệu

1.1.Thông tin là gì ?

ƒ Dữ liệu: là một tập hợp dấu hiệu phản ánh các tính chất, đặc điểm, quan hệ của sự vật, hiện tượng, quá trình

ƒ Tri thức: là tập hợp các dữ liệu được đánh giá và khái quát hóa thành những khái niệm, những hiểu biết hoàn chỉnh về bản chất của sự vật/hiện tượng

ƒ Thông tin: là các dữ liệu và tri thức được sử dụng trong thực tiễn để giải quyết một vấn đề hoặc một nhiệm vụ nào đó

Như vậy, thông tin là các dữ liệu về một vấn đề, hiện tượng nào đó được chọn lọc và xử lý để sử dụng với một mục đích nhất định

1.2.Vai trò cuả thông tin

Thông tin đang trở thành yếu tố cần thiết cho mọi người, trong mọi lĩnh vực và ngành nghề.Thông tin có các thuộc tính là chứa các giá trị tiềm ẩn cho mọi chủ thể, từ cá nhân tới từng tổ chức và toàn xã hội.Từ chỗ là đối tượng cuả khoa học, ngày nay thông tin được nhận thức như là nội dung cơ bản cuả hoạt động điều khiển và quản lý, là nguồn lực cuả sự phát triển và là nội lực chủ yếu cuả một nền kinh tế tri thức

Sự phát triển mạnh mẽ cuả khoa học kỹ thuật cùng với sự trợ giúp cuả công nghệ thông tin tiên tiến đang đưa thế giới hiện đại chuyển từ thới đại công

nghiệp sang thời đại thông tin Các nhà xã hội học đã phác hoạ “ xã hội

thông tin là xã hội mà ở đó không chỉ diễn ra quá trình chuyển dịch từ sản xuất sang dịch vụ mà còn là sự thay đổi từ một xã hội sản xuất vật phẩm sang xã hội sản xuất thông tin và tri thức”

Giao lưu thông tin

Bản chất thông tin nằm trong sự giao lưu cuả nó.Thông tin được giao lưu

bằng ngôn từ, hình ảnh, tiếng động, thư tín, điện tín ,điện thoại, hoặc phương tiện vật lý cụ thể

Trang 3

Thao tác thông tin

Trong quá trình nghiên cứu một đối tượng ta cần phải tìm kiếm, thu nhập các thông tin về đối tượng ấy, chọn lọc rút ra những thông tin cần thiết và khi cần thì đem ra sử dụng

Các thao tác thông tin cơ bản là: thu thập, xử lý, lưu trữ, tìm kiếm và phổ biến thông tin

Để thao tác thông tin, thông tin phải được biễu diễn dưới một dạng vật chất cụ thể Đó là các ký hiệu Các ký hiệu đó có thể là :

- Các chữ số : 0,1,2,3,4,5,6,7,8,9

- Các chữ cái : A,B,C a,b,c

- Các ký hiệu đồ hoạ :/, #, ⎡, ↵, ∇,

- Các ký hiệu toán học : α, β, γ, ∑, ⊂, ∈, ≥, ≠, +, −, ×, ÷,

Đo thông tin

Thông tin có thể biểu diễn thông qua các bộ ký hiệu (các chữ cái, các chữ số ) Thông tin được lưu trữ hoặc trao đổi thông qua mã cuả nó Việc khôi phục thông tin từ thông tin đã mã hoá trở lại thông tin ban đầu gọi là giải mã

Trong xử lý thông tin tự động, dạng mã được dùng là dạng mã nhị phân Thông tin được mã hoá trên bảng chữ cái chỉ gồm hai ký hiệu là chữ số 0 và chữ số 1

Khả năng hai chữ số đó được sử dụng là như nhau Lượng thông tin vưà đủ để nhận biết một trong hai trạng thái gọi là một bít Đó là đơn vị dùng để đo thông tin - Binary Digit ( chữ số nhị phân )

Trong tin học ta thường dùng một số đơn vị bội cuả bít sau đây :

Trang 4

Tên gọi Viết tắt Giá trị

Byte B 8 bit Kilobyte KB 1024=210B

Megabyte MB 1024=210KB Gigabyte GB 1024=210MB

1 3 Dữ liệu

Dữ liệu là một khái niệm cơ bản cuả tin học Sự biễu diễn thông tin bằng

một tập hợp các ký hiệu có thể thao tác được trên máy tính điện tử được gọi là dữ liệu

Khái niệm dữ liệu trong các hệ thống lưu trữ và xử lý thông tin có những đặc trưng cơ bản sau:

- Là một thông tin: phản ánh tự nhiên và xã hội

- Có cấu trúc: được biểu diễn hình thức hoá và được cố định bằng một hệ thống ký hiệu

- Có thể biến đổi: được xử lý, lưu trữ và lưu truyền trong các hệ thống và mạng lưới thông tin

Ví dụ: Hãy thử xem thông tin nào được biễu diễn bởi các dữ liệu sau:

104 Vũ Hoài Nam 73 165 19/20 Bắc Ninh

Cấu trúc của các dữ liệu trên là:

Trang 5

Mãsố Họ Và Tên Năm Sinh Chiều Cao Thị Lực Quê Quán

Với cấu trúc trên, ý nghĩa của dữ liệu đã cho là:

MA SO HO VA TEN NAM

SINH

CHIEU CAO

THI LUC QUE

QUAN

Kiểu dữ liệu

Máy tính thực sự chỉ có thể lưu trữ dữ liệu ở dạng nhị phân thô sơ Nếu muốn máy phản ánh được dữ liệu thực tế đa dạng và phong phú, cần phải xây dựng những phép ánh xạ, những qui tắc tổ chức phức tạp che lên tầng dữ liệu thô, nhằm đưa ra những khái niệm logic về hình thức lưu trữ khác nhau thường được gọi kiểu dữ liệu

Các thuộc tính của 1 kiểu dữ liệu bao gồm:

- Tên kiểu dữ liệu

- Kích thước lưu trữ

- Miền giá trị

- Tập các toán tử tác động lên dữ liệu

Các loại dữ liệu cơ bản thường là các loại dữ liệu đơn giản, khơng cĩ cấu trúc Chúng thường là các giá trị vơ hướng như các số nguyên, số thực, các ký tự, các giá trị logic Các loại dữ liệu này, do tính thơng dụng và đơn giản của mình, thường được các ngơn ngữ lập trình (NNLT) cấp cao xây dựng sẵn như một thành phần của ngơn ngữ để giảm nhẹ cơng việc cho người lập trình Chính vì vậy đơi khi người ta cịn gọi chúng là các kiểu dữ liệu định sẵn

Thơng thường, các kiểu dữ liệu cơ bản bao gồm :

Kiểu cĩ thứ tự rời rạc: số nguyên, ký tự, logic , liệt kê, miền con

Kiểu khơng rời rạc: số thực

Trang 6

Tùy ngơn ngữ lập trình, các kiểu dữ liệu định nghĩa sẵn cĩ thể khác nhau đơi chút Với ngơn ngữ C, các kiểu dữ liệu này chỉ gồm số nguyên,

số thực, ký tự Và theo quan điểm của C, kiểu ký tự thực chất cũng là kiểu số nguyên về mặt lưu trữ, chỉ khác về cách sử dụng Ngồi ra, giá trị logic ĐÚNG (TRUE) và giá trị logic SAI (FALSE) được biểu diễn trong C như là các giá trị nguyên khác zero và zero Trong khi đĩ PASCAL định nghĩa tất cả các kiểu dữ liệu cơ sở đã liệt kê ở trên và phân biệt chúng một cách chặt chẽ

Trong ngôn ngữ lập trình Pascal dữ liệu có thể nhận các kiểu chuẩn sau:

- Kiểu nguyên (Integer)

- Kiểu thực (Real)

- Kiểu ký tự (Char)

- Kiểu logic (Boolean)

- Kiểu chuỗi ký tự (String)

Trong ngôn ngữ lập trình C có các kiểu chuẩn sau:

- Kiểu ký tự (char)

- Kiểu số nguyên (int)

- Kiểu dấu phẩy động (độ chính xác đơn, độ chính xác kép)

- Kiểu void (kiểu không giá trị)

Các kiểu dữ liệu định sẵn trong C gồm các kiểu sau:

Tên kiểu Kthướ

c

Miền giá trị Ghi chú

Char 01 byte -128 đến 127 Cĩ thể dùng như số nguyên 1

byte cĩ dấu hoặc kiểu ký tự unsign

char

01 byte 0 đến 255 Số nguyên 1 byte khơng dấu

Int 02 byte -32738 đến 32767

unsign int 02 byte 0 đến 65335 Cĩ thể gọi tắt là unsign

Long 04 byte -232 đến 231 -1

Trang 7

unsign

long

Float 04 byte 3.4E-38 ¼ 3.4E38 Giới hạn chỉ trị tuyệt đối.Các

giá trị <3.4E-38 được coi = 0 Tuy nhiên kiểu float chỉ cĩ 7 chữ số cĩ nghĩa

Double 08 byte 1.7E-308 ¼

1.7E308 long

double

10 byte 3.4E-4932¼

1.1E4932

Một số điều đáng lưu ý đối với các kiểu dữ liệu cơ bản trong C là kiểu

ký tự (char) cĩ thể dùng theo hai cách (số nguyên 1 byte hoặc ký tự) Ngồi ra C khơng định nghĩa kiểu logic (boolean) mà nĩ đơn giản đồng nhất một giá trị nguyên khác 0 với giá trị TRUE và giá trị 0 với giá trị FALSE khi cĩ nhu cầu xét các giá trị logic Như vậy, trong C xét cho cùng chỉ cĩ 2 loại dữ liệu cơ bản là số nguyên và số thực Tức là chỉ cĩ

dữ liệu số Hơn nữa các số nguyên trong C cĩ thể được thể hiện trong 3

hệ cơ số là hệ thập phân, hệ thập lục phân và hệ bát phân Nhờ những quan điểm trên, C rất được những người lập trình chuyên nghiệp thích dùng

2.CẤU TRÚC DỮ LIỆU

Các thành phần dữ liệu thực tế đa dạng, phong phú và thường chứa đựng những quan hệ nào đó với nhau, do đó trong mô hình tin học của bài toán, cần phải tổ chức, xây dựng các cấu trúc thích hợp nhất sao cho vừa có thể phản ánh chính xác các dữ liệu thực tế này, vừa có thể dễ dàng dùng máy tính để xử lý Công việc này được gọi là xây dựng cấu trúc dữ liệu cho bài toán

Người ta phân biệt hai loại dữ liệu:

- Dữ liệu sơ cấp: đó là dữ liệu có thể khai thác như một thực thể

Trang 8

không thể chia nhỏ được

Ví dụ: một chữ số, một ký tự

- Dữ liệu có cấu trúc: Đó là một tập hợp dữ liệu sơ cấp mà ở đó người ta có thể tổ chức, sắp xếp và truy nhập được

Ví dụ: các mảng, các biểu ghi, các danh sách, các tệp

dưới đây ta điểm qua một số cấu trúc dữ liệu cơ bản

2.1 Mảng (array)

Kiểu dữ liệu mảng là kiểu dữ liệu trong đó mỗi phần tử của nó là một tập hợp có thứ tự các giá trị có cùng cấu trúc được lưu trữ liên tiếp nhau trong bộ nhớ Mảng có thể một chiều hay nhiều chiều Một dãy số chính là hình tượng của mảng 1 chiều, ma trận là hình tượng của mảng 2 chiều

Một điều đáng lưu ý là mảng 2 chiều có thể là mảng một chiều trong đó mỗi phần tử của nó là mảng một chiều Tương tự như vậy, một mảng n chiều có thể coi là mảng 1 chiều trong đó mỗi phần tử là 1 mảng n-1 chiều

Mảng là một danh sách các giá trị, có cùng một kiểu, được đánh dấu bởi các chỉ số Có mảng một chiều và mảng hai chiều

mảng một chiều, còn gọi là vectơ

Ví dụ: mảng A(I)=1,…,8

5 7,5 4 9 6,5 6 8,5 3

A(5) là phần tử thứ 5 của mảng

A(5) = 6,5

Mảng hai chiều, còn gọi là ma trận

Ví dụ: Mảng B(I,J), với I=1,….,8,J=1,…4

Trang 9

14 5 18 58 47 30 13 5

10 8 20 45 83 11 58 31

4 15 3 27 19 12 0 13

89 74 9 1 25 76 82 16

B(3,5) là phần từ thuộc dòng 3,cột 5

B(3,5) = 19

Ví dụ 1: Một chương trình quản lý điểm thi của sinh viên cần

lưu trữ các điểm số của 3 sinh viên Do mỗi sinh viên cĩ 4 điểm

số ứng với 4 mơn học khác nhau nên dữ liệu cĩ dạng bảng như sau:

Chỉ xét thao tác xử lý là xuất điểm số các mơn của từng sinh

viên

Giả sử cĩ các phương án tổ chức lưu trữ sau:

Phương án 1 : Sử dụng mảng một chiều

Cĩ tất cả 3(SV)*4(Mơn) = 12 điểm số cần lưu trữ, do đĩ

khai báo mảng result như sau :

int result [ 12 ] = {7, 9, 5, 2,

5, 0, 9, 4,

6, 3, 7, 4};

Trang 10

khi đó trong mảng result các phần tử sẽ được lưu trữ như

sau:

Và truy xuất điểm số môn j của sinh viên i - là phần tử tại

(dòng i, cột j) trong bảng - phải sử dụng một công thức

xác định chỉ số tương ứng trong mảng result:

bảngđiểm(dòng i, cột j) ⇒ result[((i-1)*số cột) + j]

Ngược lại, với một phần tử bất kỳ trong mảng, muốn biết

đó là điểm số của sinh viên nào, môn gì, phải dùng công thức

xác định sau

result[ i ] ⇒ bảngđiểm (dòng((i / số cột) +1), cột (i % số

cột) )

Với phương án này, thao tác xử lý được cài đặt như sau :

void XuatDiem() //Xuất điểm số của tất cả sinh

viên

{

const int so_mon = 4;

int sv,mon;

for (int i=0; i<12; i+) {

sv = i/so_mon;

mon = i % so_mon;

printf("Điểm môn %d của sv %d là:

Trang 11

%d", mon, sv,result[i]);

} }

Phương án 2 : Sử dụng mảng 2 chiều

Khai báo mảng 2 chiều result có kích thước 3 dòng* 4

cột như sau :

int result[3][4] ={{ 7, 9, 5, 2}, { 5, 0, 9, 4},

{ 6, 3, 7, 4 }};

khi đó trong mảng result các phần tử sẽ được lưu trữ như

sau :

Dòng 0 result[0][0]

=7

result[0][1]

=9

result[0][2] =5 result[0][3]

=2 Dòng 1 result[1][0]

=5

result[1][1]

=0

result[1][2] =9 result[1][3]

=4 Dòng 2 result[2][0]

=6

result[2][1]

=3

result[2][2] =7 result[2][3]

=4

Và truy xuất điểm số môn j của sinh viên i - là phần tử tại

(dòng i, cột j) trong bảng - cũng chính là phần tử nằm ở

vị trí (dòng i, cột j) trong mảng

bảngđiểm(dòng i,cột j) ⇒ result[ i] [j]

Với phương án này, thao tác xử lý được cài đặt như sau :

void XuatDiem() //Xuất điểm số của tất cả sinh viên

{

Trang 12

int so_mon = 4, so_sv =3;

for ( int i=0; i<so_sv; i+) for ( int j=0; i<so_mon; j+) printf("Điểm mơn %d của sv %d là: %d",

j, i,result[i][j]);

}

NHẬN XÉT

Cĩ thể thấy rõ phương án 2 cung cấp một cấu trúc lưu trữ

phù hợp với dữ liệu thực tế hơn phương án 1, và do vậy

giải thuật xử lý trên cấu trúc dữ liệu của phương án 2

cũng đơn giản, tự nhiên hơn

2 2.Danh sách ( Odered list)

Danh sách liên kết có thứ tự ( Odered list) la ømột vật chứa các đối tượng theo một trình tự nhất định Trình tự này thường là một khoá sắp xếp nào đó Việc thêm một đối tượng vào Olist phải bảo đảm tôn trọng thứ tự này Nghĩa là trên Olist chỉ cho thêm một thao tác thêm phần tử sao cho thứ tự định nghĩa trên Olist phải bảo toàn

Ví dụ: Danh sách các báo cáo khoa học của một viện nghiên cứu

2 3 Cây (tree)

Định nghĩa1: Cây là một tập hợp T các phần tử (gọi là nút của cây)

trong đó có 1 nút đặc biệt được gọi là gốc, các nút còn lại được chia thành những tập rời nhau T1, T2,…, Tn theo quan hệ phân cấp trong đó

Ti cũng là một cây Mỗi nút ở cấp i sẽ quản lý một số nút ở cấp i+1 Quan hệ này người ta còn gọi là quan hệ cha- con

Định nghĩa 2: Cấu trúc cây với kiểu cơ sở T là một nút cấu trúc rỗng

được gọi là cây rỗng (NULL) Một nút mà thông tin chính của nó có

Trang 13

kiểu T, nó liên kết với một số hữu hạn các cấu trúc cây khác cũng có kiểu cơ sở T Các cấu trúc này được gọi là những cây con của cây đang xét

Một số khái niệm cơ bản

Bậc của một nút: là số cây con của nút đó

Bậc của một cây: là bậc lớn nhất của các nút trong cây (số cây con tối đa của một nút thuộc cây) Cây có bậc n thì gọi là cây n phân Nút gốc: là nút không có nút cha

Nút lá: là nút có bậc bằng 0

Nút nhánh: là nút có bậc khác 0 và không phải là gốc

Mức của một nút:

Mức (gốc (T))=0

Gọi T1, T2, T3,…, Tn là các cây con của T0

Mức (T1) = Mức (T2) =…= Mức (Tn) = Mức (T0) + 1

Độ dài đường đi từ gốc đến nút x: là số nhánh cần đi qua kể từ gốc đến x Độ dài đường đi tổng của cây

Trong đó Px là độ dài đường đi từ gốc đến X

Độ dài đường đi trung bình: PI = PT/n (n là số nút trên cây T)

Ví dụ: Cấu trúc của các khung phân loại là cấu trúc cây

2.4 - Sấp (pile)

Sấp (pile) là tập hợp các dữ liệu có cấu trúc tuyến tính, sao cho ở đó

1.1

1

Trang 14

người ta có thể thêm vào hoặc bớt đi ở một đầu của sấp dữ liệu

tài liệu 1 tài liệu 2 tài liệu 3

2 5.Hàng đợi (Queue)

Hàng đợi là một vật chứa (container) các đối tượng làm việc theo cơ chế FIFO (First In First Out) nghĩa là việc thêm một đối tượng vào hàng đợi hoặc lấy ra khỏi hàng đợi được thực hiện theo cơ chế “ Vào trước ra trước”

Các đối tượng có thể được thêm vào hàng đợi bất kỳ lúc nào nhưng chỉ có đối tượng thêm vào đầu tiên mới được phép lấy ra khỏi hàng đợi Việc thêm một đối tượng vào hàng đợi luôn diễn ra ở cuối hàng đợi và một phần tử luôn được lấy ra từ đầu hàng đợi

Hàng là tập hợp dữ liệu có cấu trúc tuyến tính, sao cho các dữ liệu được thêm vào ở một đầu và lấy ra ở đầu kia

Vào → R →

6 5 4 3 2 1

2 6.Biểu ghi (Record)

Biểu ghi ( record) là một dữ liệu có cấu trúc được tạo thành một số xác định các thành phần gọi là trừơng ( field)

Ví dụ: Biểu ghi về một báo cáo đề tài nghiên cứu khoa học có thể bao gồm các trừơng hợp sau :

Trang 15

-Tác giả

- Tênsách

- Nơi xuất bản

- Nhà năm xuất bản

- Tóm tắt

Cùng với giá trị của trường đó, biểu ghi sẽ cho ta thông tin thư mục về một cuốn sách cụ thể

Trường

Trường(field) là thành phần cuả biểu ghi Đó là một dãy các ký tự nối tiếp nhau mô để tả một tiêu thức hay một đặc tính cuả đối tượng Trường có thể coi là đơn vị dữ liệu được lưu trữ, nó cung cấp thông tin liên quan một khía cạnh hay thuộc tính của đối tượng mà biểu ghi mô tả

Trên quan điểm sắp xếp người ta phân biệt: trường khoá chủ và trường khoá thứ.Trường khoá chủ là trường quan trọng và có ý nghiã xác định đối tượng Còn trường khoá thứ là trường phản ánh các thuộc tính đơn lẻ cuả đối tượng

Ví dụ :Với đối tượng là NHÂN VIÊN thì:

- Trường khoá chủ là :họ và tên hoặc số chứng minh

- Trường khoá thứ là :giới tính, năm sinh, học vấn ,

Với đối tượng là TÀI LIỆU thì :

- Trường chủ là : nhan đề

- Trường khoá thứ là : tác giả, năm xuất bản, ngôn ngữ tóm tắt,

2.7.Tệp (file)

Tệp (file) là một tập hợp dữ liệu gồm nhiều biểu ghi có chung các đặc tính

Ngày đăng: 17/03/2023, 19:59