1. Trang chủ
  2. » Công Nghệ Thông Tin

C c++bài 10 – danh sách liên kết

24 773 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

Định dạng
Số trang 24
Dung lượng 1,37 MB

Nội dung

danh sách liên kết Trong bài này chúng ta sẽ tìm hiểu 2 phần chính: Danh sách liên kết cài đặt bằng mảng Danh sách liên kết cài đặt bằng con trỏ + Danh sách liên kết đơn + Danh sách liên kết kép Trong mỗi phần chúng ta sẽ tìm hiểu các vấn đề cơ bản sau: Cài đặt danh sách (Khai báo) Khởi tạo danh sách rỗng Kiểm tra danh sách rỗng (danh sách đầy khi cài bằng mảng) Chèn phần tử vào đầu danh sách Chèn phần tử vào vị trí thứ k trong danh sách 1 Advanced nguyenvanquan7826

Trang 1

Trang chủ Forum Thành viên Freelancer Việt Nam Kiếm tiền onlineDiễn đàn Tin nhắn riêng Hỏi ­ Đáp Lịch Cộng đồng Thiết lập nhanh Liên kết Nhanh

Thoát tominhphong

Diễn đàn Lập trình ứng dụng C/C++ Tài liệu, Thủ thuật

+ Trả lời Chủ đề Kết quả 1 đến 10 của 13 trang 1 của 2 1 2 cuối

Công cụ Chủ đề Đánh giá Chủ đề Hiển thị 03­09­2013,  08:42 PM

[C/C++]Bài 10 – Danh sách liên kết

Bài 10 – Danh sách liên

kếtTrong bài này chúng ta sẽ tìm hiểu 2

Trang 2

Để khai báo danh sách này ta cần có 1mảng có số phần tử tối đa là N có kiểu

dữ liệu là item (item này là kiểu dữ liệutổng quan, khi làm nó sẽ là kiểu int, floathay kiểu cấu trúc sinh viên). Cần thêm 1biến size thể hiện số phần tử hiện có củadanh sách

Cụ thể như sau:

1.2/ Khởi tạo danh sách rỗng

Danh sách của ta rỗng khi số phần tửtrong danh sách bằng 0. Vì vậy chỉ cầnkhai báo trường size của ta bằng 0 làđược

Trang 3

Để kiểm tra danh sách rỗng hay đầy tachỉ việc xem số phần tử của danh sách

có bằng 0 hay không (rỗng) và có bằng

N hay không (đầy)

1.4/ Chèn phần tử vào vị trí k trongdanh sách

Trước khi chèn phần tử vào trong danhsách chúng ta nên xây dựng 1 hàm trả

về dữ liệu (nhập vào dữ liệu) của phần

tử cần chèn đó

Sau đó tiến hành chèn:

Trong quá trình chèn chúng ta cần kiểmtra xem danh sách đầy chưa, nhập vị trí

k cần chèn và kiểm tra nó, nếu phù hợp(0<k<=N) thì sẽ tiến hành chèn

Để chèn được phần tử x vào vị trí k trongdanh sách (trong mảng) ta cần dùng 1vòng for để di chuyển các phần tử từ vịtrí k về phía cuối mảng, sau đó chèn xvào vị trí k. Cuối cùng ta tăng size lên 1đơn vị

Trang 4

Nhập như bình thường với mảng

Trang 5

Ta duyệt từ đầu đến cuối danh sách nếu

có giá trị x thì đưa ra vị trí của nó

1.7/ Xóa phần tử thứ k trong danhsách

Trước khi xóa ta phải kiểm tra xem danhsách có rỗng không. Nếu không rỗng tanhập vào vị trí cần xóa và kiểm tra (phùhợp nếu 0<k<=N)

Ta dùng vòng for chạy đến vị trí thứ k,sau đó dồn các phần tử từ k+1 về trước

1 đơn vị. tuy nhiên ta cần lưu lại giá trịcủa phần tử xóa trước khi xóa để giữ lạithông tin nếu ta cần dùng đến nó. Cuốicùng là giảm size xuống 1 đơn vị

Trang 6

Để xóa phần tử có nội dung x trong danhsách ta tiến hành tìm phần tử x trướcbằng hàm search sau đó giá trị trả về là

vị trí của x, ta tiếp tục sử dụng hàmdel_k để xóa phần tử ở vị trí mà ta tìmđược

Vậy là chúng ta đã xây dựng xong các

Trang 7

sẽ xen lẫn chút cấu trúc của C++ trongđó

Một số vấn đề ta cần làm trong DSLK:

2.1 Giống như trong phần danh sáchliên kết xây dựng bởi mảng, bây giờ

ta sẽ cài đặt danh sách:

Danh sách liên kết có thể được mô tảnhư sau:

2.2 Khởi tạo danh sách rỗng

Trong các bài trước để có thể thay đổiđược giá trị của đối mà ta truyền vàohàm ta thưòng dùng biến con trỏ   vàtrong lời gọi hàm ta cần có & trước biếntuy nhiên khi chúng ta sử dụng cáchtruyền địa chỉ ngay khi khởi tạo hàm thìtrong lời gọi hàm ta tiên hành truyềnbiến bình thưòng mà không phải lấy địa

Trang 8

(Đây là một cách truyền địa chỉ cho biếntrong hàm ở C++.)

2.3 Kiểm tra danh sách rỗng haykhông

Cái này khỏi giải thích nhiều:

2.4 Tính độ dài danh sách

Ta dùng 1 Node để duyệt từ đầu đếncuối, vừa duyệt vừa đếm

2.5 Tạo 1 Node trong danh sách

Việc tạo 1 Node chứa thông tin trongdanh sách sẽ giúp ta dễ dàng chèn, xóa

và quản lý danh sách hơn. Trước tiên ta

sẽ phải cấp phát vùng nhớ cho Node vàsau đó gán Data vào là ok

2.6 Chèn Node P vào vị trí đầu tiên

Để chèn P vào đầu danh sách trước tiên

ta cho P trỏ đến L, sau đó chỉ việc cho Ltrỏ lại về P là ok

Trang 9

Trước tiên ta kiểm tra vị trí chèn có hợp

lệ không, nếu hợp lệ kiểm tra tiếp chènvào vị trí 1 hay k >1 . Với k >1 ta thựchiện duyệt bằng Node Q đến vị trí k­1sau đó cho P­>Next trỏ đến Node Q­

>Next, tiếp đến cho Q­>Next trỏ đến P

Trang 10

Ta duyệt danh sách cho đến khi tìm thấyhoặc kết thúc và trả về vị trí nếu tìmthấy, ngược lại trả về 0

2.9 Xóa phần tử ở vị trí đầu tiên

Trước tiên ta lưu giá trị của phần tử đầutiên vào biến x, sau đó tiền hành cho Ltrỏ đến L­>Next

Trang 11

Dùng P duyệt đến vị trí k­1 và tiến hànhcho P­>Next trỏ đến phần tư kế tiếp k

mà bỏ qua k. Lưu ý trong hình mìnhquên không lưu lại giá trị cần xóa tuynhiên các bạn cần lưu lại như khi xóa ở

vị trí đầu tiên

2.11 Xóa phần tử có giá trị x

Đon giản là ta tìm x trong danh sách

Trang 12

Đến đây coi như đã hoàn thiện phầndanh sách liên kết đơn. 

Các bạn có thể tham khảo code hoànchỉnh tại đây: http://ideone.com/BMPAja

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

Danh sách liên kết kép cũng là một dạngdanh sách liên kết nhưng mỗi phần tửliên kết với phần tử đứng trước và sau nótrong danh sách

3.1 Cài đặt danh sách:

Cấu trúc của 1 Node trong danh sách liênkết kép tương đối giống với DSLKD

nhưng có thêm một con trỏ trỏ về Nodetrước nó

Cấu trúc của DSLKK không như DSLKD

có 1 Con trỏ trỏ đến đầu DS, nhưngDSLKK ngoài con trỏ trỏ đến đầu danhsách còn có thêm 1 con trỏ trỏ đến Node

Trang 13

Để tìm độ dài của DSLKK ta hoàn toàn cóthể làm giống như DSLKD, tức dùng contrỏ duyệt từ đầu đến cuối, nhưng trongDSLKK ta có thể dùng 2 con trỏ ở đầu vàcuối để đếm

3.5 Tạo 1 Node P chứa thông tin

Trang 14

3.7 Chèn phần tử vào cuối danh sáchtương tự như đầu danh sách

3.8 Chèn phần tử vào vị trí k

Trước khi chèn vào vị trí k cần kiểm tra

vị trí k có phù hợp, có phải đầu danhsách hay cuối danh sách. Nếu chèn vàogiữa danh sách ta thực hiện theo 4 bước

Trang 15

3.9 Xóa phần tử đầu, cuối danh sách

Trang 16

Trước khi xóa ở vị trí k cần kiểm tra vị trí

k có phù hợp, có phải đầu danh sách haycuối danh sách hay ở giữa

3.11 Tìm phần tử x trong DS

Trang 18

bacuongcomputer (03­10­2013),dtafe (03­12­2013),hai.leader94 (03­14­

2013),kaka747 (07­10­2013),mungluom (03­10­2013),SolitaryWolf (03­18­

VIETSOURCE.NET­ NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MàNGUỒNHọc Lập Trình | Video Lập Trình Web HTML CSS | Video Lap Trinh C | Video Hoc LapTrinh | Video Hoc Lap Trinh Pascal | Video Hoc Lap Trinh PHP | Lap Trinh Web | LapTrinh Ung Dung | Phan Mem Mien Phi | BBPhim.Com| Phim Hanh Dong| Phim Kinh

Trang 19

VIETSOURCE.NET­ NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MàNGUỒNHọc Lập Trình | Video Lập Trình Web HTML CSS | Video Lap Trinh C | Video Hoc LapTrinh | Video Hoc Lap Trinh Pascal | Video Hoc Lap Trinh PHP | Lap Trinh Web | LapTrinh Ung Dung | Phan Mem Mien Phi | BBPhim.Com| Phim Hanh Dong| Phim Kinh

Đã và đang. 

VIETSOURCE.NET­ NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MàNGUỒNHọc Lập Trình | Video Lập Trình Web HTML CSS | Video Lap Trinh C | Video Hoc LapTrinh | Video Hoc Lap Trinh Pascal | Video Hoc Lap Trinh PHP | Lap Trinh Web | LapTrinh Ung Dung | Phan Mem Mien Phi | BBPhim.Com| Phim Hanh Dong| Phim Kinh

Di|

#4Advanced

 nguyenvanquan7826 

Trang 20

 Gửi bởi StarrySky 

Phần này nhiều ác. nhưng phần cài đặt DSLK bằng con trỏ chưa có hả anh

Trang 21

VIETSOURCE.NET­ NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MàNGUỒNHọc Lập Trình | Video Lập Trình Web HTML CSS | Video Lap Trinh C | Video Hoc LapTrinh | Video Hoc Lap Trinh Pascal | Video Hoc Lap Trinh PHP | Lap Trinh Web | LapTrinh Ung Dung | Phan Mem Mien Phi | BBPhim.Com| Phim Hanh Dong| Phim Kinh

Trang 22

VIETSOURCE.NET­ NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MàNGUỒNHọc Lập Trình | Video Lập Trình Web HTML CSS | Video Lap Trinh C | Video Hoc LapTrinh | Video Hoc Lap Trinh Pascal | Video Hoc Lap Trinh PHP | Lap Trinh Web | LapTrinh Ung Dung | Phan Mem Mien Phi | BBPhim.Com| Phim Hanh Dong| Phim Kinh

bài viết của a rất hay. tks a rất nhiều

VIETSOURCE.NET­ NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MàNGUỒN

#9

Beginner

hungthinh1806 

Trang 23

Học Lập Trình | Video Lập Trình Web HTML CSS | Video Lap Trinh C | Video Hoc LapTrinh | Video Hoc Lap Trinh Pascal | Video Hoc Lap Trinh PHP | Lap Trinh Web | LapTrinh Ung Dung | Phan Mem Mien Phi | BBPhim.Com| Phim Hanh Dong| Phim Kinh

Chọn nhanh  Tài liệu, Thủ thuật Lên trên

Tag của Chủ đề này

Trang 24

Video Tutorialcăn ho ssg tower quy trình seo dịch vụ seo tổng thể dịch vụ seo từ khóa diễn đàn học lập trình web

Liên kếtchè thái nguyên Haivl

Dich vu SEO

Liên kếtcông ty seo Việc làm Thái Nguyên Tuyển sinh 2014 Thông tin kinh tế đào tạo seo Dao tao SEO

Textlink: thiet ke webxe chevrolet cruze, dao tao seo,

   

Tag của Chủ đề nàyNone

Bạn Có thể Gửi Chủ đềmới

Bạn Có thể Gửi trả lờiBạn Có thể Gửi file đínhkèm

Bạn Có thể Sửa bài viếtcủa mình

 

Quyền viết bài

BB code đang BậtSmilies đang Bật[IMG] code đangBật

[VIDEO] code isBật

HTML code đangTắt

Nội quy ­ Quyđịnh

­­ VSNet Version 2   ­­ Việt Nam Powered by vBulletin® Version 4.2.0IP hiện tại của bạn: 

Liên lạc với chúng tôi   Trang chủ   Lưu trữ   Lên trên

© 2012 thuộc về  VSNet­

Cộng đồng mã nguồn Việt

Nam

Ngày đăng: 07/03/2015, 17:59

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w