Upload
minhphongmpt
View
46
Download
5
Embed Size (px)
DESCRIPTION
danh sách liên kết
Citation preview
Chủ đề: [C/C++]Bài 10 – Danh sách liên kết
Trang chủ Forum Thành viên Freelancer Việt Nam Kiếm tiền online
Diễ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áttominhphong
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ị
03092013, 08:42 PM
Ngày tham gia:Bài viết:Thanks:Thanked: 714 in 426 posts
Apr 20121,358357
[C/C++]Bài 10 – Danh sách liên kết
Bài 10 – Danh sách liênkết
Trong bài này chúng ta sẽ tìm hiểu 2phần chính:
Danh sách liên kết cài đặtbằng mảngDanh sách liên kết cài đặtbằng con trỏ
+/ Danh sách liên kết đơn+/ Danh sách liên kết képTrong mỗi phần chúng ta sẽ tìm hiểu cácvấn đề cơ bản sau:
Cài đặt danh sách (Khai báo)Khởi tạo danh sách rỗngKiểm tra danh sách rỗng(danh sách đầy khi cài bằngmảng)Chèn phần tử vào đầu danhsáchChèn phần tử vào vị trí thứ ktrong danh sách
#1
Advanced
nguyenvanquan7826
Nhập danh sáchXuất danh sáchTìm 1 phần tử trong danhsáchXóa phần tử đầu tiên trongdanh sáchXóa phần tử thứ k trongdanh sáchXóa phần tử có nội dung Xtrong danh sách
1/ Danh sách liên kết cài bằng mảngLoại danh sách này thường được gọi làdanh sách kế tiếp. Bây giờ ta sẽ làm việcvới các vấn đề:
1.1/ Cài đặt (khai báo) danh sáchĐể 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ểudữ 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ỗngDanh 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.
1.3/ Kiểm tra danh sách rỗng, danhsách đầyĐể kiểm tra danh sách rỗng hay đầy tachỉ việc xem số phần tử của danh sáchcó bằng 0 hay không (rỗng) và có bằngN hay không (đầy).
1.4/ Chèn phần tử vào vị trí k trongdanh sáchTrướ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ầntử 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ị.
1.5/ Nhập danh sáchNhập như bình thường với mảng
1.6/ Tìm phần tử x trong danh sáchTa duyệt từ đầu đến cuối danh sách nếucó giá trị x thì đưa ra vị trí của nó.
1.7/ Xóa phần tử thứ k trong danhsáchTrướ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ước1 đơ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ị.
1.8/ Xóa phần tử có nội dung x trongdanh sáchĐể 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
thao tác cơ bản trên danh sách cài đặtbằng mảng. Các bạn ghép các hàm vàocùng với hàm main() gọi các hàm trên làok.Các bạn có thể tham khảo tại đây:http://ideone.com/VyjxYo2. Danh sách liên kết đơn (gọi nhanhlà danh sách liên kết DSLK)
Trong các bài trước mình viết code tất cảđều là chuẩn C, nhưng từ bây giờ mìnhsẽ 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
chỉ (thêm &) trước biến nữa. (Đâ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ôngCái này khỏi giải thích nhiều:
2.4 Tính độ dài danh sáchTa 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áchViệc tạo 1 Node chứa thông tin trongdanh sách sẽ giúp ta dễ dàng chèn, xóavà quản lý danh sách hơn. Trước tiên tasẽ 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ênta cho P trỏ đến L, sau đó chỉ việc cho Ltrỏ lại về P là ok
2.7 Chèn Node P vào vị trí k trongdanh sách:Trước tiên ta kiểm tra vị trí chèn có hợplệ 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í k1sau đó cho P>Next trỏ đến Node Q>Next, tiếp đến cho Q>Next trỏ đến P
2.8 Tìm phần tử co giá trị x trongdanh sách: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
2.10 Xóa phần tư ở vị trí kDùng P duyệt đến vị trí k1 và tiến hànhcho P>Next trỏ đến phần tư kế tiếp kmà 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
bằng hàm Search và xóa tại vị trí tìmthấy mà ta nhận được
Đế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épDanh 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 DSLKDnhưng có thêm một con trỏ trỏ về Nodetrước nó
Cấu trúc của DSLKK không như DSLKDcó 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
cuối của danh sách
3.2 Một số thao tác chính
3.3 Khởi tạo và kiểm tra rỗngKhởi tạo ta cho 2 con trỏ đầu và cuối trỏvê NULL, Khi kiểm tra rỗng thi chỉ cầnxem con trỏ đầu có trỏ về NULL không làđủ
3.4 Độ dài danh sách:Để 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
3.6 Chèn phần tử vào vị trí đầu tiên:Trước khi chèn vào đầu danh sách cầnkiểm tra xem danh sách rỗng hay không.Nếu danh sách rỗng ta cho Head và Tailđều trỏ đến P. Nếu không rỗng thực hiệnchèn.
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í kTrước khi chèn vào vị trí k cần kiểm travị 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
3.9 Xóa phần tử đầu, cuối danh sách
3.10 Xóa phần tử ở vị trí kTrướ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
3.12 Xóa phần tử x trong DS
code tham khảo:http://ideone.com/wCCjIH
Vậy là phần này coi như chúng ta đa tìmhiểu xong danh sách liên kết: (DSLKmảng, DSLK đơn, DSLK kép).
Nguồn: http://svictu.com
Xem các chủ đề khác cùng chuyênmục VSNet:
Đồ họa trong DevC++ đơn giản UpdateLập trình C với bảng màu tronglinux –...Màu chữ trong DevC++ – Howdo change color...[C/C++]get() and fget() inC/C++ – Cảnh báo...[C/C++]Bài 11: Ngăn xếp vàHàng đợi (Stack...Giúp cách bẫy lỗi trong lập trình.Ngôn ngữ...Sử dụng đồ họa trong DevC[C/C++]Bài 10 – Danh sách liênkếtDebug (gỡ rối) trong dev Cbài tập và cách debug trongc/c++
Lần sửa cuối bởi nguyenvanquan7826, ngày 05222013 lúc 08:37 PM.
VIETSOURCE.NET NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MÃ NGUỒN
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 KinhDi|
Trả lời kèm Trích dẫn Thanks
Có 7 thành viên cảm ơn nguyenvanquan7826 trong bài viết này:
bacuongcomputer (03102013),dtafe (03122013),hai.leader94 (03142013),kaka747 (07102013),mungluom (03102013),SolitaryWolf (03182013),StarrySky (03092013)
03152013, 08:50 PM
Ngày tham gia:Bài viết:Thanks:Thanked: 2 in 2 posts
Oct 20121024
bài viết dễ hiểu thật, post tiếp phần danh sách liên kết này đi bạn ơi
VIETSOURCE.NET NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MÃ NGUỒN
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 KinhDi|
#2
Beginnermungluom
Trả lời kèm Trích dẫn Thanks
Những thành viên đã cảm ơn mungluom trong bài viết này:
nguyenvanquan7826 (03152013)
05212013, 05:28 PM #3
Ngày tham gia:Bài viết:Thanks:Thanked: 26 in 20 posts
Jul 2012240185
Anh Quân ơi update tiếp đi anh. Phần này em đang học
VIETSOURCE.NET NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MÃ NGUỒN
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 KinhDi|
CoderStarrySky
Trả lời kèm Trích dẫn Thanks
05222013, 01:37 AM
Ngày tham gia:Bài viết:Thanks:Thanked: 714 in 426 posts
Apr 20121,358357
Đã 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ỒN
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 KinhDi|
#4
Advanced
nguyenvanquan7826
Gửi bởi StarrySky
Anh Quân ơi update tiếp đi anh. Phần này em đang học
Trả lời kèm Trích dẫn Thanks
Những thành viên đã cảm ơn nguyenvanquan7826 trong bài viết này:
StarrySky (05222013)
05222013, 04:30 PM
Ngày tham gia:Bài viết:Thanks:Thanked: 26 in 20 posts
Jul 2012240185
Phần này nhiều ác. nhưng phần cài đặt DSLK bằng con trỏ chưa có hả anh
VIETSOURCE.NET NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MÃ NGUỒN
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 KinhDi|
#5
CoderStarrySky
Trả lời kèm Trích dẫn Thanks
05222013, 07:20 PM
Ngày tham gia:Bài viết:Thanks:Thanked: 714 in 426 posts
Apr 20121,358357
Danh sách liên kết đơn chính là con trỏ đó bạnĐã update xong phần danh sách liên kết nhá, tiếp sẽ là Stack và Queue
Lần sửa cuối bởi nguyenvanquan7826, ngày 05222013 lúc 08:41 PM.
VIETSOURCE.NET NƠI ĐAM MÊ BẮT ĐẦU
#6
Advanced
nguyenvanquan7826
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
DIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MÃ NGUỒN
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 KinhDi|
Trả lời kèm Trích dẫn Thanks
Có 2 thành viên cảm ơn nguyenvanquan7826 trong bài viết này:
lặng lẽ (06122013),StarrySky (05222013)
07262013, 11:41 AM
Ngày tham gia:Bài viết:Thanks:Thanked: 0 in 0 posts
Feb 20132914
Code:for (i=(*L).size;i>k;i‐‐)(*L).elems[i] = (*L).elems[i‐1];//ko hiểu(*L).elems[k‐1]=x;(*L).size++;
giải thích mình code này cái.Nó chạy thế nào ? ở hàm insert_k ấy Cả DeL_K ấy cũnggiống code trên đó
VIETSOURCE.NET NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MÃ NGUỒN
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 KinhDi|
#7
In Traningsanko
Trả lời kèm Trích dẫn Thanks
07262013, 01:13 PM #8
Advancedbacuongcomputer
Ngày tham gia:Bài viết:Thanks:Thanked: 701 in 401 posts
Mar 20121,166387
Đoạn code này dùng để dồn danh sách, bạn xoá 1 phần tử thì chỉ có cách dồn danhsách chứ không hề có hàm nào xoá được một phần tử
VIETSOURCE.NET NƠI ĐAM MÊ BẮT ĐẦUDIỄN ĐÀN CHIA SẺ KIẾN THỨC LẬP TRÌNH, MÃ NGUỒN
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 KinhDi|
Gửi bởi sanko
Code:for (i=(*L).size;i>k;i‐‐)(*L).elems[i] = (*L).elems[i‐1];//ko hiểu(*L).elems[k‐1]=x;(*L).size++;
giải thích mình code này cái.Nó chạy thế nào ? ở hàm insert_k ấy Cả DeL_K ấycũng giống code trên đó
Trả lời kèm Trích dẫn Thanks
Những thành viên đã cảm ơn bacuongcomputer trong bài viết này:
sanko (07262013)
07282013, 08:28 PM
Ngày tham gia:Bài viết:Thanks:Thanked 1 Time in 1 Post
Jul 201310
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
Beginnerhungthinh1806
« Chủ đề trước | Chủ đề Tiếp theo »
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 KinhDi|
Trả lời kèm Trích dẫn Thanks
Những thành viên đã cảm ơn hungthinh1806 trong bài viết này:
nguyenvanquan7826 (07282013)
07282013, 08:38 PM
Ngày tham gia:Bài viết:Thanks:Thanked: 714 in 426 posts
Apr 20121,358357
Cảm ơn bạn đã quan tâm. Chúc bạn học tập tốt.
Email: [email protected]
#10
Advanced
nguyenvanquan7826
Gửi bởi hungthinh1806
bài viết của a rất hay. tks a rất nhiều..
Trả lời kèm Trích dẫn Thanks
Những thành viên đã cảm ơn nguyenvanquan7826 trong bài viết này:
bac100993 (09112013)
+ Trả lời Chủ đề trang 1 của 2 1 2 cuối
Chọn nhanh Tài liệu, Thủ thuật Lên trên
Tag của Chủ đề này
Video Tutorialcăn ho ssg towerquy trình seodịch vụ seo tổng thểdịch vụ seo từ khóadiễn đàn học lập trình web
Liên kếtchè thái nguyênHaivlDich vu SEO
Liên kếtcông ty seoViệc làm Thái NguyênTuyển sinh 2014Thông tin kinh tếđào tạo seoDao tao SEO
Textlink: thiet ke webxe chevrolet cruze, dao tao seo,
Tag của Chủ đề này
NoneXem Nhóm Tag Thêm / Sửa Tag
Bạn Có thể Gửi Chủ đềmớiBạn Có thể Gửi trả lờiBạn Có thể Gửi file đínhkèmBạ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ậtHTML code đangTắt
Nội quy Quyđịnh
VSNet Version 2 Việt NamIP hiện tại của bạn:
Powered by vBulletin® Version 4.2.0
Liên lạc với chúng tôi Trang chủ Lưu trữ Lên trên
© 2012 thuộc về VSNetCộng đồng mã nguồn Việt
Nam