DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG pot

39 938 0
DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG pot

Đ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

CHƯƠNG I : TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GIẢI CHƯƠNG II : MỘT SỐ THUẬT TOÁN TÌM KIẾM VÀ SẮP XẾP CHƯƠNG III : DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG IV : CÂY I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ 25N A M 4 int andy = 25 Địa chỉ ô nhớ Nội dung ô nhớ Bộ nhớ b = 4 char name[10] = “NAM” 2 5 7 9 2 5 7 9 4 8 9 int a[6] char ten[100] I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ 25 a = 25 Con trỏ là biến lưu địa chỉ của biến khác c = *pa I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ a b pa = &a pa b = a 25 c 25 andy = 25 ted = &andy 25 6442 6442 andy = &andy = ted = &ted = *ted = I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ andy ted 25 6442 6442 8444 25 *P 25 andy Một số hạn chế có thể gặp phải khi sử dụng các biến tĩnh:  Cấp phát ô nhớ dư, gây ra lãng phí ô nhớ.  Cấp phát ô nhớ thiếu, chương trình thực thi bị lỗi. Để tránh những hạn chế trên, ngôn ngữ C++ cung cấp cho ta một loại biến đặc biệt gọi là biến động với các đặc điểm sau:  Chỉ phát sinh trong quá trình thực hiện chương trình chứ không phát sinh lúc bắt đầu chương trình.  Khi chạy chương trình, kích thước của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể thay đổi.  Sau khi sử dụng xong có thể giải phóng để tiết kiệm chỗ trong bộ nhớ. Tuy nhiên các biến động không có địa chỉ nhất định nên ta không thể truy cập đến chúng được. Vì thế, ngôn ngữ C+ + lại cung cấp cho ta một loại biến đặc biệt nữa để khắc phục tình trạng này, đó là biến con trỏ (pointer) với các đặc điểm:  Biến con trỏ không chứa dữ liệu mà chỉ chứa địa chỉ của dữ liệu hay chứa địa chỉ của ô nhớ chứa dữ liệu.  Kích thước của biến con trỏ không phụ thuộc vào kiểu dữ liệu, luôn có kích thước cố định là 2 byte. I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ  Toán tử lấy địa chỉ (&) Ví dụ : int a; int *p; p = &a;  Toán tử tham chiếu (*) Ví dụ : int a, b; int *p; a = 2; p = &a; b = *p; I. KIỂU CON TRỎ 1. Giới Thiệu Kiểu Dữ Liệu Con Trỏ Cú pháp: <Kiểu> * <Tên con trỏ> Ý nghĩa: Khai báo một biến có tên là <Tên con trỏ> con trỏ dùng để chứa địa chỉ của các biến có kiểu <Kiểu> Ví dụ 1: Khai báo 2 biến a, b có kiểu int và 2 biến pa, pb là 2 biến con trỏ kiểu int int a, b, *pa, *pb; Ví dụ 2: Khai báo biến f kiểu float và biến pf là con trỏ float float f, *pf; I. KIỂU CON TRỎ 2. Khai báo biến Con Trỏ char *ted = “hello” h e l l o \0 5441 5441 ted [4] *(ted + 4) ted I. KIỂU CON TRỎ 2. Khai báo biến Con Trỏ Ví dụ: int a; float b; int *pa; float *pb; pa = &a; pb = &b; Lưu ý: ví dụ sau đây không đúng do không tương thích kiểu: int a; float *pb; pb = &a; I. KIỂU CON TRỎ 2. Các thao tác trên Con Trỏ 2.1 Gán địa chỉ của biến cho biến con trỏ (Toán tử &) [...]... danh sách liên kết 4.2 Thêm vào đầu danh sách InsertFirst( ): thêm một nút có nội dung x vào đầu DSLK void InsertFirst (node* &pFirst, int x) { node *p; p = new node; p->info = x; p->pNext = pFirst; pFirst = p; } II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.2 Thêm vào đầu danh sách NULL x x x pFirst p  p  p II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.3... DANH SÁCH LIÊN KẾT ĐƠN 1 Khái niệm II DANH SÁCH LIÊN KẾT ĐƠN 1 Khái niệm info pNext pFirst NULL  pFirst là con trỏ chỉ đến phần tử đầu tiên của danh sách  Phần tử cuối của danh sách liên kết với vùng liên kết có nội dung NULL  Mỗi nút của danh sách có trường info chứa nội dung của nút và trường pNext là con trỏ chỉ đến nút kế tiếp trong danh sách 32 1FF30 1FF60 66 1FF60 1FF90 66 1FF90 00000 II DANH. .. cout pNext; // q is the node that will be deleted p->Next = q->pNext; delete (q); } } II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.6 Xóa phần tử đứng sau nút có địa chỉ là p NULL p  pFirst x q  x x II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.7 Traverse( ): Duyệt qua toàn bộ danh sách void Traverse (node* pFirst) { node... (node* &pFirst) { node *p; while (pFirst != NULL) // reach to end ? { p = pFirst; pFirst = p->pNext; delete p; } } II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.8 Xóa toàn bộ danh sách p p p pFirst x x x NULL II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.9 Tìm kiếm trong danh sách  Search( ): Tìm nút đầu tiên trong DS có info bằng với x Do đây là DSLK nên ta phải... pFirst; pFirst = p->pNext; delete p; } } II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.5 Xóa phần tử đầu danh sách NULL x p  pFirst x x II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.6 Xóa phần tử đứng sau nút có địa chỉ là p  DeleteAfter( ): Xoá phần tử đứng sau nút có địa chỉ p void DeleteAfter (node* &p) { node *q; if (p == NULL || p->pNext == NULL) cout... pFirst  p II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.4 Kiểm tra danh sách rỗng  Empty( ): Kiểm tra danh sách rỗng int Empty (node* pFirst) { if (pFirst == NULL) return 1; else return 0; } II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.5 Xóa phần tử đầu danh sách  DeleteFirst( ): Xoá phần tử đầu danh sách void DeleteFirst (node* &pFirst) { node *p; if (Empty(pFirst))... p; II DANH SÁCH LIÊN KẾT ĐƠN 1 Khái niệm  Cấu trúc danh sách liên kết là cấu trúc động, việc cấp phát nút và giải phóng nút trên danh sách xảy ra khi chương trình đang chạy Ta thường cấp phát nút cho danh sách liên kết bằng biến động  Các phần tử sẽ được cấp phát vùng nhớ trong quá trình thực thi chương trình, do đó chúng có thể nằm rải rác ở nhiều nơi khác nhau trong bộ nhớ (phân bố không liên tục)... x vào sau nút có địa chỉ p trong DSLK First void InsertAfter (node* &p, int x) { node *q; if (p == NULL) cout info = x; q->pNext = p->pNext; p->pNext = q; } } II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.3 Chèn 1 node mới sau node có địa chỉ p NULL q  4 x 6 pFirst  p II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh. .. Thời gian thực hiện các phép toán thêm vào và loại bỏ không phụ thuộc vào số phần tử của DSLK II DANH SÁCH LIÊN KẾT ĐƠN 2 Các đặc tính Hạn chế của Danh Sách Liên Kết :  Vì mỗi nút của DSLK phải chứa thêm trường pNext nên DSLK phải tốn thêm bộ nhớ  Tìm kiếm trên DSLK không nhanh vì ta chỉ được truy xuất tuần tự từ đầu danh sách II DANH SÁCH LIÊN KẾT ĐƠN 3 Khai báo và khởi tạo struct node { int info;... p = pFirst; if (p == NULL) cout pNext; p }  } pFirst x NULL x x II DANH SÁCH LIÊN KẾT ĐƠN 4 Các phép toán trên danh sách liên kết 4.8 Xóa toàn bộ danh sách  DeleteAll( ): Xoá toàn bộ danh sách Có thể gán pFirst = NULL để xóa toàn bộ danh sách nhưng phần vùng nhớ đã cấp cho các phần tử trong DS không được giải phóng Do đó chúng . CHƯƠNG I : TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GIẢI CHƯƠNG II : MỘT SỐ THUẬT TOÁN TÌM KIẾM VÀ SẮP XẾP CHƯƠNG III : DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG IV : CÂY I không liên tục). II. DANH SÁCH LIÊN KẾT ĐƠN 1. Khái niệm NULL pFirst II. DANH SÁCH LIÊN KẾT ĐƠN 1. Khái niệm  pFirst là con trỏ chỉ đến phần tử đầu tiên của danh sách.  Phần tử cuối của danh sách. new node; delete p; II. DANH SÁCH LIÊN KẾT ĐƠN 1. Khái niệm  Cấu trúc danh sách liên kết là cấu trúc động, việc cấp phát nút và giải phóng nút trên danh sách xảy ra khi chương trình đang chạy.

Ngày đăng: 02/08/2014, 18:21

Từ khóa liên quan

Mục lục

  • Slide 1

  • Slide 2

  • Slide 3

  • Slide 4

  • Slide 5

  • Slide 6

  • Slide 7

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 18

  • Slide 19

  • Slide 20

  • Slide 21

  • Slide 22

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

Tài liệu liên quan