1. Trang chủ
  2. » Luận Văn - Báo Cáo

KỸ THUẬT LẬP TRÌNH DANH SÁCH LIÊN KẾT

69 3 0

Đ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 đề Kỹ Thuật Lập Trình Danh Sách Liên Kết
Trường học Trường Đại Học Khoa Học Tự Nhiên
Chuyên ngành Khoa Công Nghệ Thông Tin
Năm xuất bản 2009
Thành phố HCMUS
Định dạng
Số trang 69
Dung lượng 0,91 MB

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

Nội dung

Các loại danh sách liên kết Danh sách liên kết đơn M i phần tử có M T liên kết đến M T phần tử khác phần tử đứng sau... Các loại danh sách liên kết Danh sách liên kết kép M i phần tử

Trang 1

Trường Đại học Khoa học Tự nhiên

Khoa Công nghệ thông tin

KỸ THUẬT LẬP TRÌNH

DANH SÁCH LIÊN KẾT

Trang 2

Nội dung trình bày

Giới thiệu

Các loại danh sách liên kết

Các thao tác trên danh sách liên kết

So sánh danh sách liên kết và mảng

Trang 5

Giới thiệu

Thực tế:

 Không xác định được chính xác số lượng

phần tử

• Danh sách bệnh nhân: tăng/giảm

• Danh sách sinh viên: tăng/giảm

 Vùng nhớ thay đổi trong quá trình sử dụng

=> Không đủ vùng nhớ cấp phát liên tục

Trang 6

Các loại danh sách liên kết

 Danh sách liên kết đơn

 singly linked list

 uni-directional linked list

 Danh sách liên kết kép

 doubly linked list

 bi-directional linked list

 Danh sách liên kết vòng

 circularly linked list

 ring list

Trang 7

Các loại danh sách liên kết

Danh sách liên kết đơn

M i phần tử có M T liên kết đến M T phần tử khác (phần tử đứng sau)

Trang 8

Các loại danh sách liên kết

Danh sách liên kết kép

M i phần tử có HAI liên kết đến hai phần tử

đứng sau và trước nó

Trang 9

Các loại danh sách liên kết

Danh sách liên kết vòng

Có mối liên kết giữa phần tử cuối và phần tử

đầu

Trang 10

Phần tử trên danh sách liên kết

Trang 11

Phần tử trên danh sách liên kết

Trang 12

Phần tử trên danh sách liên kết

Trang 13

Phần tử trên danh sách liên kết

Trang 14

Phần tử trên danh sách liên kết

Trang 15

Phần tử trên danh sách liên kết

Trang 16

Phần tử trên danh sách liên kết

Trang 17

Phần tử trên danh sách liên kết

Trang 18

Phần tử trên danh sách liên kết

Cài đặt

Viết cài đặt cấu trúc phần tử trong trường hợp

Trang 19

Tổ chức danh sách liên kết

Tổ chức

M i danh sách liên kết bao gồm:

 Con trỏ đến phần tử đầu (hoặc/và cuối) danh sách

 (Các) phần tử trên danh sách

• Dữ liệu

• Các mối liên kết

Trang 20

Tổ chức danh sách liên kết

Tổ chức

pHead

Trang 23

pNode -> number = Data;

pNode -> pNext = NULL;

Trang 25

pNode -> number = Data;

pNode -> pPrevious = NULL;

pNode -> pNext = NULL;

Trang 26

Các thao tác trên danh sách

Trang 27

Các thao tác trên danh sách liên kết

Trang 28

Các thao tác trên danh sách liên kết

Thêm phần tử

Vào đầu danh sách:

int AddHead (NODE* & pHead , float Data );

 Nếu danh sách r ng

• Phần tử vừa thêm là phần tử đầu danh sách

 Ngược lại,

pHead

Trang 29

Các thao tác trên danh sách liên kết

Thêm phần tử

 Vào đầu danh sách:

 Nếu danh sách r ng

if (pHead == NULL) {

}

 Ngược lại

else {

Trang 30

Các thao tác trên danh sách liên kết

Thêm phần tử

 Vào đầu danh sách:

int AddHead (NODE* & pHead , float Data )

{

NODE *pNode;

pNode = CreateNode (Data );

if ( pNode == NULL ) return 0;

Trang 31

Các thao tác trên danh sách liên kết

Trang 32

Các thao tác trên danh sách liên kết

• Tạo node mới có dữ liệu là Data

• Cập nhật lại liên kết của pNode và node vừa tạo

X

pNode

Trang 33

Các thao tác trên danh sách liên kết

Trang 34

Các thao tác trên danh sách liên kết

Thêm phần tử

Vào cuối danh sách:

int AddLast (NODE* & pHead , float Data );

int AddLast (NODE *& pHead , NODE* & pTail ,

float Data );

Trang 35

Các thao tác trên danh sách liên kết

Duyệt danh sách

Đảm bảo việc truy xuất đến tất cả các phần tử trên danh sách

Thuật toán:

 Bắt đầu từ phần tử đầu tiên

 Trong khi chưa hết danh sách

• Xử lý phần tử hiện hành

• Di chuyển đến phần tử kế tiếp

Trang 36

Các thao tác trên danh sách liên kết

Trang 37

Các thao tác trên danh sách liên kết

Trang 38

Các thao tác trên danh sách liên kết

Trang 39

Các thao tác trên danh sách liên kết

Trang 40

Các thao tác trên danh sách liên kết

Trang 41

Các thao tác trên danh sách liên kết

Xoá phần tử

Cuối danh sách:

 Cập nhật lại pTail

 Xóa pTail cũ

Trang 42

Các thao tác trên danh sách liên kết

Trang 43

Các thao tác trên danh sách liên kết

Trang 44

Các thao tác trên danh sách liên kết

Trang 45

Các thao tác trên danh sách liên kết

Trang 46

Các thao tác trên danh sách liên kết

Bài tập 1

Cho m t DSLK đơn, m i node trong DSLK lưu thông tin là 1 số nguyên và con trỏ đến node kế Tạo 2 DSLK đơn mới (không phá huỷ DSLK đã cho)

 M t danh sách chứa các số lẻ của danh sách

đã cho

 M t danh sách chứa các số chẵn của danh

sách đã cho

Trang 47

Các thao tác trên danh sách liên kết

Trang 48

Các thao tác trên danh sách liên kết

Bài tập 2

Cho danh sách liên kết đơn L, lập giải thuật thực hiện các phép sau đây:

 Tính số lượng các nút của danh sách

 Tìm tới nút thứ k trong danh sách, nếu có nút thứ k thì cho biết địa chỉ của nút đó, ngược lại trả về null

 Bổ sung m t nút vào sau nút k

 Loại bỏ nút đứng trước nút k

Trang 49

Các thao tác trên danh sách liên kết

Bài tập 2

 Cho con trỏ M trỏ tới 1 node có trong danh

sách nói trên và m t danh sách đơn khác có node đầu tiên là P Chèn danh sách P vào

sau nút trỏ bởi M

 Đảo ngược danh sách đã cho

Trang 50

Các thao tác trên danh sách liên kết

Bài tập 3

Hàm MoveToFront có tác dụng di chuyển 1

node trong xâu lên đầu xâu, như hình sau:

Chọn kiểu khai báo hàm phù hợp và viết code

void MoveToFront (NODE ฀ ฀ pHead , NODE ฀ ฀ pTail ,

NODE ฀ ฀ pNode )

Lưu ý: các kí hiệu ฀ có thể là *, & hoặc khoảng

trắng

Trang 51

Các thao tác trên danh sách liên kết

Bài tập 4

Quản lý thông tin sinh viên của m t lớp gồm :

 Mã sinh viên : chu i 8 ký tự

 Tên sinh viên : chu i 20 ký tự

 Điểm Toán, Lý, Hoá

 Tổ chức cấu trúc dữ liệu thích hợp để biểu diễn

các thông tin trên, và cài đặt các chức năng:

Trang 52

Các thao tác trên danh sách liên kết

Viết hàm rút gọn danh sách liên kết trên theo

dạng sau: nếu các phần tử có cùng khóa Key thì chỉ giữ lại m t phần tử và giá trị Value thì c ng

dồn vào phần tử đó

Trang 53

Các thao tác trên danh sách liên kết

Viết hàm rút gọn danh sách liên kết trên theo

dạng sau: nếu các phần tử có cùng khóa Key thì chỉ giữ lại m t phần tử và giá trị Value thì c ng

dồn vào phần tử đó

Trang 55

Danh sách liên kết kép

Các thao tác

Chèn vào đầu danh sách

int AddHead (DNODE *& pHead, DNODE *& pTail, float Data)

 Bước 1:

Trang 56

Danh sách liên kết kép

Các thao tác

Chèn vào cuối danh sách

int AddTail(DNODE *& pTail, float Data)

- Bước 1:

- Bước 2:

- Bước 3:

Trang 59

Danh sách liên kết kép

Các thao tác

Hủy m t phần tử đứng sau m t phần tử cho

trước

int RemoveAfter (DNODE *& pHead, DNODE *pNode)

int RemoveAfter (DNODE *& pTail, DNODE *pNode)

pNode cần xóa

Trang 61

Các thao tác trên danh sách liên kết kép

Bài tập 6

Cho DSLK kép L mà m i node có lưu thông tin

là m t số nguyên Viết hàm loại bỏ tất cả các

node có thông tin là giá trị K cho trước

Trang 62

62

Nhắc lại: có mối liên kết giữa phần tử cuối và

phần tử đầu

– Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng

Trang 64

Danh sách liên kết vòng

Các thao tác

Thêm cuối danh sách

Trang 66

Danh sách liên kết vòng

Bài tập 7

Lập giải thuật thực hiện các phép sau đây đối

với danh sách liên kết vòng:

 Ghép 2 danh sách nói vòng có nút “đầu danh sách” lần lượt trỏ bởi p và q thành m t danh sách mà nút đầu danh sách trỏ bởi p

 Lập bản sao của m t danh sách nối vòng có nút đầu danh sách trỏ bởi L

Trang 67

- Truy xuất tuần tự, danh sách

liên kết đơn chỉ có thể duyệt 1

chiều

- Truy xuất ngẫu nhiên, đơn giản, nhanh chóng

- Cần nhiều bộ nhớ hơn để lưu

trữ con trỏ tham chiếu - Không cần

Trang 68

So sánh danh sách liên kết đơn

và kép

DSLK kép: cho phép duyệt danh sách theo 2

chiều

DSLK kép cần nhiều b nhớ hơn để lưu trữ

DSLK kép: các thao tác phức tạp hơn (vì phải

cập nhật cả 2 con trỏ)

Ngày đăng: 22/09/2022, 16:30

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN