Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 3 - Trịnh Anh Phúc, Nguyễn Đức Nghĩa

78 105 0
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 3 - Trịnh Anh Phúc, Nguyễn Đức Nghĩa

Đ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

Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Các cấu trúc dữ liệu cơ bản cung cấp cho người học các kiến thức: Các khái niệm cơ bản, mảng, danh sách, ngăn xếp, hàng đợi, tổng kết. Mời các bạn cùng tham khảo nội dung chi tiết.

Chương : Các cấu trúc liệu Trịnh Anh Phúc Bộ môn Khoa Học Máy Tính, Viện CNTT & TT, Trường Đại Học Bách Khoa Hà Nội Ngày tháng 12 năm 2013 CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Giới thiệu Các khái niệm Kiểu liệu trừu tượng Cấu trúc liệu Con trỏ Mảng Danh sách Định nghĩa Các cách cài đặt danh sách tuyến tính Ngăn xếp Định nghĩa Các cách cài đặt ngăn xếp Ngăn xếp đệ qui Ứng dụng Hàng đợi Định nghĩa Các cách cài đặt hàng CuuDuongThanCong.com đợi Ứng dụng Tổng kết Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Các khái niệm Kiểu liệu Các kiểu liệu đặc trưng Tập giá trị Cách biểu diễn liệu sử dụng chung cho tất giá trị Tập phép tốn thực tất giá trị Ví dụ kiểu liệu C Kiểu char short unsigned int long float double Bits Giá trị nhỏ -128 16 -32768 16 32 −231 32 CuuDuongThanCong.com −3.4 × 1038 64 −1.7 × 10308 Giá trị lớn 127 32767 65535 231 − 3.4 × 1038 1.7 × 10308 Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Các khái niệm Kiểu liệu trừu tượng Kiểu liệu trừu tượng bao gồm : Tập giá trị Tập phép tốn thực tất giá trị Rõ ràng khơng có cách biểu diễn liệu chung cho liệu trừu tượng Kiểu Mảng Danh sách Đồ thị Ngăn xếp Hàng đợi Cây Đối tượng Phép toán phần tử khởi tạo (create), chèn (insert), phần tử chèn (insert), xóa (delete), tìm (search), đỉnh, cạnh duyệt (traverse), tìm đường (search path), phần tử gắp (pop), ấn (push), kiểm tra rỗng, phần tử CuuDuongThanCong.com vào hàng (enqueue), khỏi hàng (dequeue), gốc, lá, cành duyệt (traverse), tìm kiếm (search), Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Các khái niệm Cấu trúc liệu Định nghĩa : Cấu trúc liệu họ biến, có kiểu liệu khác nhau, liên kết lại theo cách thức Ơ (cell) đơn vị sở cấu thành cấu trúc liệu Có thể hình dung hộp đựng giá trị phát sinh từ kiểu liệu hay phức hợp Cấu trúc liệu đc tạo nhờ đặt tên cho nhóm (group) đặt giá trị cho số ô để mô tả liên kết ô CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Các khái niệm Cấu trúc liệu (tiếp) Có ba phương pháp tạo nhóm Dùng mảng dãy có kiểu liệu xác định e.g int name[100] Dùng cấu trúc ghi ô tạo họ (gọi trường) có kiều khác struct record{ float data; int next;} reclist[100]; Dùng file giống mảng nhiên phần tử truy cập cách CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Các khái niệm Con trỏ (pointer) Định nghĩa : Con trỏ (pointer) ô mà giá trị sang khác A B Khi vẽ cấu trúc liệu sử dụng trỏ, để thể ô A trỏ sang ô B, ta sử dụng mũi tên hướng từ A đến B Ví dụ : Để khai báo trỏ ptr C trỏ đến có kiêu liệu cho trước tên celltype celltype *ptr CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Các khái niệm Phân loại cấu trúc liệu Thông thường cách phân loại sách dạy CTDL> Cấu trúc liệu sở (Base data structures) : int, char, float, double Cấu trúc liệu tuyến tính (Linear data structures) : mảng, danh sách, hàng đợi, ngăn xếp Cấu trúc liệu phi tuyến (Non linear data structures) : cây, đồ thị, bảng băm CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Các khái niệm Kiểu liệu trừu tượng Cấu trúc liệu Con trỏ Mảng Danh sách Định nghĩa Các cách cài đặt danh sách tuyến tính Ngăn xếp Định nghĩa Các cách cài đặt ngăn xếp Ngăn xếp đệ qui Ứng dụng Hàng đợi Định nghĩa Các cách cài đặt hàng đợi CuuDuongThanCong.com Ứng dụng Tổng kết Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà1 Nội tháng) 12 năm 2013 / 78 Mảng Mảng Mảng liệu trừu tượng Tập giá trị : tập cặp < index, value > với giá trị index có giá trị từ tập giá trị Các thao tác : Khởi tạo Chèn phần tử Xóa bỏ phần tử CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 10 / 78 Hàng đợi Kiểu liệu trừu tượng ngăn xếp (Queue) Định nghĩa : danh sách tuyến tính mà phép tốn chèn ln thực thực phía, gọi phía sau hay phía cuối (back or rear), phép tốn xóa thực phía cịn lại, gọi phía trước hay đầu (front or head) Nguyên tắc : Vào trước Ra trước, First-In First-Out (FIFO) Các phép toán Khởi tạo Kiểm tra rỗng isEmpty() Xác định có tràn hay khơng Trả lại phần tử đầu hàng front() Chèn phần tử vào cuối hàng enqueue() CuuDuongThanCong.com Xóa lấy phần tử đầu hàng dequeue() In hàng đợi print() Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 64 / 78 Hàng đợi Cài đặt hàng đợi mảng Sử dụng mảng Q có kích thước N theo thứ tự vịng trịn Có hai biến để lưu vị trí đầu cuối (front rear) : f số phần tử đầu hàng đợi r số vị trí sau vị trí phần tử cuối hàng đợi Vị trí r giữ rỗng f r Q Cấu hình bình thường r Q f CuuDuongThanCong.com Cấu hình xoay vịng trịn Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 65 / 78 Hàng đợi Cài đặt hàng đợi mảng Cài đặt phép toán viết mã giả Tính kích thước hàng đợi Function size() return (N-f+r) mod N End Kiểm tra hàng đợi có rỗng khơng Function isEmpty() return (f=r) End mod phép chia lấy phần dư CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 66 / 78 Hàng đợi Cài đặt hàng đợi mảng (tiếp) Cài đặt phép toán viết mã giả Chèn phần tử vào cuối hàng đợi Procedure enqueue(o) if (size=N-1) then Hiện lỗi tràn hàng đợi else Q[r] ← o r ← (r+1) mod N endif End CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 67 / 78 Hàng đợi Cài đặt hàng đợi mảng (tiếp) Cài đặt phép toán viết mã giả Lấy phần tử đầu hàng đợi Function dequeue() o ← NUL if isEmpty() then Hiện hàng đợi rỗng else o ← Q[f] f ← (f+1) mod N endif return o End CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 68 / 78 Hàng đợi Cài đặt hàng đợi danh sách móc nối Khi cài đặt hàng đợi danh sách móc nối đơn struct qnode{ int element; struct qnode *next; } node; struct queue {node *front; node *back;}; DataType kiểu liệu cần lưu trữ, khai báo trước CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 69 / 78 Hàng đợi Cài đặt hàng đợi danh sách móc nối (tiếp) Các tốn tử khai báo ngôn ngữ C sau : // Các hàm thực toán tử queue *create(); int isEmpty(queue *q); int size(queue *q); void enqueue(queue *q, node *newNode); node *dequeue(queue *q); // In phần tử hàng đợi void print(queue *q) CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 70 / 78 Hàng đợi Cài đặt hàng đợi danh sách móc nối (tiếp) Các tốn tử với mã nguồn C tương ứng queue *create(){ queue *q; q = (queue *)malloc(sizeof(queue)); if(q==NULL) return NULL;// Khơng cịn nhớ q->front = NULL; q->rear = NULL; return q; } CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 71 / 78 Hàng đợi Cài đặt hàng đợi danh sách móc nối (tiếp) Các tốn tử với mã nguồn C tương ứng int isEmpty(queue *q){ return ((q->front==NULL)&&(q->rear==NULL)); } int size(queue *q){ queue *ptr=q->front; int count=0; while(ptr!=NULL){ ptr = ptr->next; count++; } return count; } CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 72 / 78 Hàng đợi Cài đặt hàng đợi danh sách móc nối (tiếp) Các toán tử với mã nguồn C tương ứng void enqueue(queue *q, node *newNode){ /* trường hợp ta dùng hàm malloc để tạo newNode */ if(!isEmpty()){/* nối vào đuôi hàng đợi */ q->rear->next = *newNode; q->rear = *newNode; } else {/*nút liệu hàng đợi*/ q->rear = *newNode; q->front = *newNode; } CuuDuongThanCong.com } Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 73 / 78 Hàng đợi Cài đặt hàng đợi danh sách móc nối (tiếp) Các tốn tử với mã nguồn C tương ứng node *dequeue(queue *q){ node *ptr = q->front; if(ptr!=NULL){/* có nút liệu hàng đợi */ q->front = q->front->next; if(q->front==NULL) /* nút liệu cuối */ q->rear = NULL; ptr->next = NULL;/* ko trỏ vào front */ } return ptr;/* trả lại trỏ chưa free nhớ */ } CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 74 / 78 Hàng đợi Ứng dụng : Chuyển đổi xâu ký tự số thành số thập phân n Ý tưởng : Đưa ký tự số xâu ký tự vào hàng đợi Q Khởi tạo giá trị n←0 Lấy ký tự số khởi hàng đợi Q cập nhật số thập phân n theo công thức n ← n × 10 + giá trị ký tự số CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 75 / 78 Hàng đợi Ứng dụng : Chuyển đổi xâu ký tự số thành số thập phân n (tiếp) Mã giả thuật toán sau : // Nạp ký tự số ch vào hàng đợi enqueue(Q,ch) while(ch = digit) // khởi tạo giá trị số n n←0 done ← false // Vòng lặp cập nhật giá trị số thập phân n n ← n × 10 + giá trị ký tự số if(not isEmpty(Q)) dequeue(Q,ch) else done ← true endif CuuDuongThanCong.com while( done or (ch not digit)) Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 76 / 78 Hàng đợi Ứng dụng : Nhận biết xâu ký tự palidromes Xâu ký tự palidromes xâu ký tự mà đọc từ trái qua phải giống đọc từ phải qua trái Ví dụ từ sau "NOON", "DEED", "RADAR", "MADAM","POP" "ABLE WAS I ERE I SAW ELBA" "các","cục","tịt","tít","ơtơ" Ý tưởng giải thuật nhận biết xâu ký tự palidromes : Cho xâu ký tự vào hàng đợi ngăn xếp Lấy ký tự từ hàng đợi từ ngăn xếp chúng giống tất xâu ký tự palidromes, ngược lại khơng giống lần khơng phải xâu ký tự palidromes CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 77 / 78 Tổng kết Phân biệt liệu cấu trúc liệu (ô liệu + liên kết) Hiểu ý nghĩa phép toán cấu trúc liệu : danh sách, ngăn xếp, hàng đợi Hiểu mối liên quan không gian đệm dạng ngăn xếp gọi hàm thủ tục Các ứng dụng danh sách, ngăn xếp, hàng đợi CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 2013 78 / 78 ... CuuDuongThanCong.com ? ?3. 4 × 1 038 64 −1.7 × 1 030 8 Giá trị lớn 127 32 767 65 535 231 − 3. 4 × 1 038 1.7 × 1 030 8 Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc& dữTT, liệu Trường giải thuật Đại Học... tháng) 12 năm 20 13 / 78 Các khái niệm Cấu trúc liệu Định nghĩa : Cấu trúc liệu họ biến, có kiểu liệu khác nhau, liên kết lại theo cách thức Ơ (cell) đơn vị sở cấu thành cấu trúc liệu Có thể hình... Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc& dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà tháng Nội )12 năm 20 13 13 / 78 Các khái niệm Kiểu liệu trừu tượng Cấu trúc liệu

Ngày đăng: 11/01/2020, 16:44

Từ khóa liên quan

Mục lục

  • Các khái nim

    • Kiu d liu tru tng

    • Cu trúc d liu

    • Con tro

    • Mang

    • Danh sách

      • Ðinh nghıa

      • Các cách cài t danh sách tuyn tính

      • Ngan xp

        • Ðinh nghıa

        • Các cách cài t ngan xp

        • Ngan xp và qui

        • ng dung

        • Hàng i

          • Ðinh nghıa

          • Các cách cài t hàng i

          • ng dung

          • Tng kt

Tài liệu cùng người dùng

Tài liệu liên quan