Xóa 1 Node trong danh sách liên kết đôi
Danh sách liên kết đôi (Doubly Linked List) là một biến thể của Danh sách liên kết (Linked List), trong đó hoạt động duyệt qua các nút có thể được thực hiện theo hai chiều: về trước và về sau một cách dễ dàng khi so sánh với Danh sách liên kết đơn. Dưới đây là một số khái niệm quan trọng cần ghi nhớ về Danh sách liên kết đôi. Show
Biểu diễn Danh sách liên kết đôi
Như hình minh họa trên, bạn cần ghi nhớ:
Các hoạt động cơ bản trên Danh sách liên kết đôi
Hoạt động chèn trong Danh sách liên kết đôi Phần dưới đây là giải thuật minh họa cho hoạt động chèn tại vị trí đầu của một Danh sách liên kết đôi. //Chèn link tại vị trí đầu tiên void insertFirst(int key, int data) { //tạo một link struct node *link = (struct node*) malloc(sizeof(struct node)); link->key = key; link->data = data; if(isEmpty()) { //Biến nó thành last link last = link; }else { //Cập nhật prev link đầu tiên head->prev = link; } //Trỏ nó tới first link cũ link->next = head; //Trỏ first tới first link mới head = link; }Chương trình danh sách liên kết đôi trong C Hoạt động xóa trong Danh sách liên kết đôi Phần dưới đây là giải thuật minh họa cho hoạt động xóa phần tử tại vị trí đầu của một Danh sách liên kết đôi. Chương trình danh sách liên kết đôi trong C Hoạt động chèn tại vị trí cuối trong Danh sách liên kết đôi Phần dưới đây là giải thuật minh họa cho hoạt động chèn tại vị trí cuối của một Danh sách liên kết đôi. //Chèn link vào vị trí cuối cùng void insertLast(int key, int data) { //tạo một link struct node *link = (struct node*) malloc(sizeof(struct node)); link->key = key; link->data = data; if(isEmpty()) { //biến nó thành last link last = link; }else { //làm cho link trở thành last link mới last->next = link; //Đánh dấu last node là prev của new link link->prev = last; } //Trỏ last tới new last node last = link; }Chương trình danh sách liên kết đôi trong C Bài tập C này giúp bạn làm quen dần với cách tạo danh sách liên kết đôi và cách xóa một phần tử từ danh sách liên kết đôi trong C. Để giải bài tập này, mình sử dụng cấu trúc struct trong C. #include
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube: Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học. Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi. danh-sach-lien-ket-trong-c.jsp This entry is part 5 of 15 in the series Cấu trúc dữ liệu Ở bài viết trước, tôi đã hướng dẫn bạn cách cài đặt danh sách liên kết đơn và các kiến thức về danh sách liên kết. Bài viết này, mình sẽ hướng dẫn bạn cài đặt danh sách liên kết đôi nhé. Danh sách liên kết đôi có sự liên kết 2 chiều giữa 2 phần tử liền kề nhau trong khi danh sách liên kết đơn chỉ có liên kết 1 chiều. 1. Lý thuyết về Danh sách liên kết đôi Một Node của danh sách liên kết đôi sẽ có dạng như sau:
Và hình dưới đây so sanh sự khác nhau giữ dslk đôi và dslk đơn: Khác biệt giữa danh sách liên kết đơn với danh sách liên kết đôi2. Cài đặt danh sách liên kết đôi2.1. Khai báo & khởi tạoKhác một chút với dslk đơn, ngoài con trỏ next, chúng ta sẽ có thêm con trỏ prev để liên kết với Node trước nó. Chúng ta vẫn sẽ để data có kiểu int để đơn giản và dễ hiểu nhé. Ngay sau khai báo, chúng ta sẽ khởi tạo Node đầu tiên của danh sách liên kết đôi.
2.2. Tạo mới 1 NodeThay vì chỉ cho next = NULL và gán giá trị cho Node mới, chúng ta cũng phải cho con trỏ prev = NULL.
2.3. Thêm NodeThêm vào đầu
Về cơ bản, ý tưởng thêm Node vào đầu/ cuối vẫn giống với thêm vào đầu trong danh sách liên kết đơn. Thêm vào cuối
2.4. Xóa NodeXóa ở đầu
Xóa ở cuối
2.5. Duyệt danh sách liên kếtDuyệt từ đầu tới cuốiTa sẽ duyệt bắt đầu từ Node head cho tới trước khi gặp Node NULL bằng cách dùng con trỏ next.
Duyệt từ cuối về đầuLần này, ta sẽ duyệt bắt đầu từ Node tailcho tới trước khi gặp Node NULL bằng cách dùng con trỏ prev.
3. Full code danh sách liên kết đôi
Kết quả chạy:
|