Bài giảng Kỹ thuật lập trình - Chương 7.1: Cấu trúc dữ liệu (Trường Đại học Bách khoa Hà Nội)
Số trang: 118
Loại file: pdf
Dung lượng: 3.24 MB
Lượt xem: 11
Lượt tải: 0
Xem trước 10 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Kỹ thuật lập trình - Chương 7.1: Cấu trúc dữ liệu. Chương này cung cấp cho học viên những nội dung về: dữ liệu, kiểu dữ liệu và cấu trúc dữ liệu; các kiểu dữ liệu; mảng; danh sách; ngăn xếp; hàng đợi; cây;... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình - Chương 7.1: Cấu trúc dữ liệu (Trường Đại học Bách khoa Hà Nội)CẤU TRÚC DỮ LIỆU Dữ liệu, kiểu dữ liệu & cấu trúc dữ liệuMachine Level Data Storage 0100110001101001010001Primitive Data Types 28 3.1415 A arrayBasic Data StructuresHigh-Level Data Structures stack queue list hash table treeCáckiểu dữ liệuKiểu dữ liệu cơ bản Kiểu dữ liệu có cấu trúc(primitive data type) (structured data type)▪Đại diện cho các dữ liệu ▪Được xây dựng từ cácgiống nhau, không thể kiểu dữ liệu (cơ bản, cóphân chia nhỏ hơn được cấu trúc) khácnữa ▪Có thể được các ngôn▪Thường được các ngôn ngữ lập trình định nghĩangữ lập trình định nghĩa sẵn hoặc do lập trình viênsẵn tự định nghĩa▪Ví dụ▫C/C++: int, long, char, bool...▫Thao tác trên các số nguyên:+ - * / ...Nội dung 1. Mảng 2. Danh sách 3. Ngăn xếp 4. Hàng đợi 5. Cây1.MảngArray Mảng Array▪ Dãy hữu hạn các phần tử liên tiếp có cùng kiểu và tên▪ Một hay nhiều chiều ▫ C không giới hạn số chiều của mảngCú pháp DataType ArrayName[size]; mảng nhiều chiều DataType ArrayName[size 1][size 2]...[size n]; Khởi tạo giá trị mảng▪ C1. Khi khai báo float y[5] = { 3.2, 1.2, 4.5, 6.0, 3.6 } int m[6][2] = { { 1, 1 }, { 1, 2 }, { 2, 1 }, { 2, 2 }, { 3, 1 }, { 3, 2 } }; char s1[6] = { H, a, n, o, i, }; //hoặc char s1[6] = Hanoi; char s1[] = Dai hoc Bach Khoa Hanoi; //L = 24 int m[][] = { { 1, 2, 3 }, { 4, 5, 6 } };▪ C2. Khai báo rồi gán giá trị cho từng phần tử của mảng. int m[4]; m[0] = 1; m[1] = 2; m[2] = 3; m[3] = 4;2.Danh sáchList Danh sách List▪ Danh sách ▫ Tập hợp các phần tử cùng kiểu ▫ Số lượng các phần tử của danh sách không cố định▪ Phân loại ▫ Danh sách tuyến tính: ▸ Có phần tử đầu tiên, phần tử cuối cùng ▸ Thứ tự trước / sau của các phần tử được xác định rõ ràng, ví dụ sắp theo thứ tự tăng dần, giảm dần hay thứ tự trong bảng chữ cái ▸ Các thao tác trên danh sách phải không làm ảnh hưởng đến trật tự này ▫ Danh sách phi tuyến tính: các phần tử trong danh sách không được sắp thứ tự Danh sách List▪ Lưu trữ ▫ Sử dụng vùng các ô nhớ liên tiếp trong bộ nhớ danh sách kế tiếp ▫ Sử dụng vùng các ô nhớ không liên tiếp trong bộ nhớ danh sách móc nối ▸ Danh sách nối đơn ▸ Danh sách nối képThao tác trêndanh sách Khởi tạo danh sách (create) Kiểm tra danh sách rỗng (isEmpty) Kiểm tra danh sách đầy (isFull) Tính kích thước (sizeOf) Xóa rỗng danh sách (clear) Thêm một phần tử vào danh sách tại một ví trí cụ thể (insert) Loại bỏ một phần tử tại một vị trí cụ thể khỏi danh sách(remove) Lấy một phần tử tại một vị trí cụ thể (retrieve) Thay thế giá trị của một phần tử tại một vị trí cụ thể (replace) Duyệt danh sách và thực hiện một thao tác tại các vị trí trongdanh sách (traverse) Danh sách kế tiếp▪ Sử dụng một vector lưu trữ gồm một số các ô nhớ liên tiếp ▫ Các phần tử liền kề nhau được lưu trữ trong những ô nhớ liền kề nhau ▫ Mỗi phần tử của danh sách cũng được gán một chỉ số chỉ thứ tự được lưu trữ trong vector ▫ Tham chiếu đến các phần tử sử dụng địa chỉ được tính giống như lưu trữ mảng. 0 1 2 i last n-1 Danh sách kế tiếp▪ Ưu điểm ▫ Tốc độ truy cập vào các phần tử của danh sách nhanh▪ Nhược điểm ▫ Cần phải biết trước kích thước tối đa của danh sách ? ▫ Thực hiện các phép toán bổ sung các phần tử mới và loại bỏ các phần tử cũ khá tốn kém ? Thêm vào danh sách kế tiếp▪ Điều kiện tiên quyết: ▫ Danh sách phải được khởi tạo rồi ▫ Danh sách chưa đầy ▫ Phần tử thêm vào chưa có trong danh sách▪ Điều kiện hậu nghiệm: ▫ Phần tử cần thêm vào có trong danh sách insert(3, ‘z’) 0 1 2 3 4 5 6 7 8 9 z a b c d e f g h count=9 count=8 Thêm vào danh sách kế tiếpAlgorithm Insert Input: index là vị trí cần thêm vào, element là giá trị cần thêm vào Output: tình trạng danh sách if list đầy return overflow if index nằm ngoài khoảng [0..count] return range_error //Dời tất cả các phần tử từ index về sau 1 vị trí for i = count-1 down to index entry[i+1] = entry[i] entry[index] = element // Gán element vào vị trí index count++ // Tăng số phần tử lên 1 return success;End InsertXóa khỏidanh sách kế tiếp remove(3, ‘d’) 0 1 2 3 4 5 6 7 8 ...
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình - Chương 7.1: Cấu trúc dữ liệu (Trường Đại học Bách khoa Hà Nội)CẤU TRÚC DỮ LIỆU Dữ liệu, kiểu dữ liệu & cấu trúc dữ liệuMachine Level Data Storage 0100110001101001010001Primitive Data Types 28 3.1415 A arrayBasic Data StructuresHigh-Level Data Structures stack queue list hash table treeCáckiểu dữ liệuKiểu dữ liệu cơ bản Kiểu dữ liệu có cấu trúc(primitive data type) (structured data type)▪Đại diện cho các dữ liệu ▪Được xây dựng từ cácgiống nhau, không thể kiểu dữ liệu (cơ bản, cóphân chia nhỏ hơn được cấu trúc) khácnữa ▪Có thể được các ngôn▪Thường được các ngôn ngữ lập trình định nghĩangữ lập trình định nghĩa sẵn hoặc do lập trình viênsẵn tự định nghĩa▪Ví dụ▫C/C++: int, long, char, bool...▫Thao tác trên các số nguyên:+ - * / ...Nội dung 1. Mảng 2. Danh sách 3. Ngăn xếp 4. Hàng đợi 5. Cây1.MảngArray Mảng Array▪ Dãy hữu hạn các phần tử liên tiếp có cùng kiểu và tên▪ Một hay nhiều chiều ▫ C không giới hạn số chiều của mảngCú pháp DataType ArrayName[size]; mảng nhiều chiều DataType ArrayName[size 1][size 2]...[size n]; Khởi tạo giá trị mảng▪ C1. Khi khai báo float y[5] = { 3.2, 1.2, 4.5, 6.0, 3.6 } int m[6][2] = { { 1, 1 }, { 1, 2 }, { 2, 1 }, { 2, 2 }, { 3, 1 }, { 3, 2 } }; char s1[6] = { H, a, n, o, i, }; //hoặc char s1[6] = Hanoi; char s1[] = Dai hoc Bach Khoa Hanoi; //L = 24 int m[][] = { { 1, 2, 3 }, { 4, 5, 6 } };▪ C2. Khai báo rồi gán giá trị cho từng phần tử của mảng. int m[4]; m[0] = 1; m[1] = 2; m[2] = 3; m[3] = 4;2.Danh sáchList Danh sách List▪ Danh sách ▫ Tập hợp các phần tử cùng kiểu ▫ Số lượng các phần tử của danh sách không cố định▪ Phân loại ▫ Danh sách tuyến tính: ▸ Có phần tử đầu tiên, phần tử cuối cùng ▸ Thứ tự trước / sau của các phần tử được xác định rõ ràng, ví dụ sắp theo thứ tự tăng dần, giảm dần hay thứ tự trong bảng chữ cái ▸ Các thao tác trên danh sách phải không làm ảnh hưởng đến trật tự này ▫ Danh sách phi tuyến tính: các phần tử trong danh sách không được sắp thứ tự Danh sách List▪ Lưu trữ ▫ Sử dụng vùng các ô nhớ liên tiếp trong bộ nhớ danh sách kế tiếp ▫ Sử dụng vùng các ô nhớ không liên tiếp trong bộ nhớ danh sách móc nối ▸ Danh sách nối đơn ▸ Danh sách nối képThao tác trêndanh sách Khởi tạo danh sách (create) Kiểm tra danh sách rỗng (isEmpty) Kiểm tra danh sách đầy (isFull) Tính kích thước (sizeOf) Xóa rỗng danh sách (clear) Thêm một phần tử vào danh sách tại một ví trí cụ thể (insert) Loại bỏ một phần tử tại một vị trí cụ thể khỏi danh sách(remove) Lấy một phần tử tại một vị trí cụ thể (retrieve) Thay thế giá trị của một phần tử tại một vị trí cụ thể (replace) Duyệt danh sách và thực hiện một thao tác tại các vị trí trongdanh sách (traverse) Danh sách kế tiếp▪ Sử dụng một vector lưu trữ gồm một số các ô nhớ liên tiếp ▫ Các phần tử liền kề nhau được lưu trữ trong những ô nhớ liền kề nhau ▫ Mỗi phần tử của danh sách cũng được gán một chỉ số chỉ thứ tự được lưu trữ trong vector ▫ Tham chiếu đến các phần tử sử dụng địa chỉ được tính giống như lưu trữ mảng. 0 1 2 i last n-1 Danh sách kế tiếp▪ Ưu điểm ▫ Tốc độ truy cập vào các phần tử của danh sách nhanh▪ Nhược điểm ▫ Cần phải biết trước kích thước tối đa của danh sách ? ▫ Thực hiện các phép toán bổ sung các phần tử mới và loại bỏ các phần tử cũ khá tốn kém ? Thêm vào danh sách kế tiếp▪ Điều kiện tiên quyết: ▫ Danh sách phải được khởi tạo rồi ▫ Danh sách chưa đầy ▫ Phần tử thêm vào chưa có trong danh sách▪ Điều kiện hậu nghiệm: ▫ Phần tử cần thêm vào có trong danh sách insert(3, ‘z’) 0 1 2 3 4 5 6 7 8 9 z a b c d e f g h count=9 count=8 Thêm vào danh sách kế tiếpAlgorithm Insert Input: index là vị trí cần thêm vào, element là giá trị cần thêm vào Output: tình trạng danh sách if list đầy return overflow if index nằm ngoài khoảng [0..count] return range_error //Dời tất cả các phần tử từ index về sau 1 vị trí for i = count-1 down to index entry[i+1] = entry[i] entry[index] = element // Gán element vào vị trí index count++ // Tăng số phần tử lên 1 return success;End InsertXóa khỏidanh sách kế tiếp remove(3, ‘d’) 0 1 2 3 4 5 6 7 8 ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Kỹ thuật lập trình Kỹ thuật lập trình Cấu trúc dữ liệu Kiểu dữ liệu có cấu trúc Danh sách tuyến tính Danh sách phi tuyến tínhGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 316 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 262 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 203 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 193 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 163 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 159 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 152 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 149 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 139 0 0