Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Thêm 1 nút , Xóa 1 nút , Sửa 1 nút, duyệt danh sách theo liên kết phải, theo liên kết trái.

  1. #1
    Ngày gia nhập
    09 2012
    Bài viết
    1

    Angry Thêm 1 nút , Xóa 1 nút , Sửa 1 nút, duyệt danh sách theo liên kết phải, theo liên kết trái.

    Template danh sách liên kết.Thêm 1 nút , Xóa 1 nút , Sửa 1 nút, duyệt danh sách theo liên kết phải, theo liên kết trái.
    CODE của em bị lỗi m.người xem giúp em vs :(
    Cảm ơn m.người trước !

    DoubleLinkedList.h
    PHP Code:

    Code:
    #ifndef DOUBLELINKEDLIST_H
    #define DOUBLELINKEDLIST_H
    
    template <class T>
    class DoubleLinkedList
    {
    private:
        struct Node {
            T val;
            Node* left;
            Node* right;
            Node(const T& val, Node* left=NULL, Node* right=NULL):
                val(val), left(left), right(right) {}
        };
    public:
        typedef Node* iterator;
    public:
        // ctors / dtor
        DoubleLinkedList(): pHead(NULL), pTail(NULL) {}
        ~DoubleLinkedList();
        // insertion methods
        void push_back(const T& val);
        void push_front(const T& val);
        void insert_before(iterator pos, const T& val);
        void insert_after(iterator pos, const T& val);
        // removal methods
        void pop_back();
        void pop_front();
        void erase(iterator& pos);
        // access iterators
        iterator head()const {return pHead;}
        iterator tail()const {return pTail;}
    private:
        iterator pHead;
        iterator pTail;
    };
    
    #endif // DOUBLELINKEDLIST_H
    
    
    //---------------------------------------------------
    template <class T>
    DoubleLinkedList<T>::~DoubleLinkedList()
    {
        iterator todelete = NULL;
        while (pHead)
        {
            todelete = pHead;
            pHead = pHead->right;
            delete todelete;
        }
    }
    //---------------------------------------------------
    template <class T>
    void DoubleLinkedList<T>::push_back(const T& val)
    {
        if (!pTail) {
            pHead = pTail = new Node(val);
        } else {
            pTail->right = new Node(val, pTail, NULL);
            pTail = pTail->right;
        }
    }
    //---------------------------------------------------
    template <class T>
    void DoubleLinkedList<T>::push_front(const T& val)
    {
        if (!pHead) {
            pHead = pTail = new Node(val);
        } else {
            pHead->left = new Node(val, NULL, pHead);
            pHead = pHead->left;
        }
    }
    //---------------------------------------------------
    template <class T>
    void DoubleLinkedList<T>::insert_before(iterator pos, const T& val)
    {
        iterator pBefore = pos->left;
        pos->left = new Node(val, pBefore, pos);
        if (!pBefore) {
            pHead = pos->left;
        } else {
            pBefore->right = pos->left;
        }
    }
    //---------------------------------------------------
    template <class T>
    void DoubleLinkedList<T>::insert_after(iterator pos, const T& val)
    {
        iterator pAfter = pos->right;
        pos->right = new Node(val, pos, pAfter);
        if (!pAfter) {
            pTail = pos->right;
        } else {
            pAfter->left = pos->right;
        }
    }
    //---------------------------------------------------
    template <class T>
    void DoubleLinkedList<T>::pop_back()
    {
        if (!pTail) return;
        iterator todelete = pTail;
        pTail = pTail->left;
        delete todelete;
        pTail->right = NULL;
    }
    //---------------------------------------------------
    template <class T>
    void DoubleLinkedList<T>::pop_front()
    {
        if (!pHead) return;
        iterator todelete = pHead;
        pHead = pHead->right;
        delete todelete;
        pHead->left = NULL;
    }
    //---------------------------------------------------
    template <class T>
    void DoubleLinkedList<T>::erase(iterator& pos)
    {
        if (!pos) {
            return;
        } else if (pos==pHead) {
            pop_front();
            pos = pHead;
        } else if (pos==pTail) {
            pos = NULL;
            pop_back();
        } else {
            iterator left = pos->left;
            iterator todelete = pos;
            pos = pos->right;
            delete todelete;
            pos->left = left;
            left->right = pos;
        }
    }
    //---------------------------------------------------
    //---------------------------------------------------
    testdriver.cpp
    PHP Code:

    Code:
    #include <iostream>
    #include <iomanip>  //
    #include "DoubleLinkedList.h"int main()
    {
        DoubleLinkedList<double> p;  // tao danh sach lien ket doi, type gi cung duoc (int,float,string,Animal,Dog,Cat,...) ta lay tam la type double
        DoubleLinkedList<double>::iterator it;
        std::cout << std::fixed << std::setprecision(1);
    
        // them nut (o dau danh sach)
        p.push_front(3);  //3
        p.push_front(2);  //2 3
        p.push_front(1);  //1 2 3
    
        // them nut (o cuoi danh sach)
        p.push_back(4);  //1 2 3 4
        p.push_back(5);  //1 2 3 4 5
        p.push_back(6);  //1 2 3 4 5 6
    
        // them nut (o giua danh sach)
        it = p.head();
        it = it->right;
        std::cout << "Inserting before " << it->val
                  << " value " << it->val-.5 << std::endl;
        p.insert_before(it, it->val-.5); //them truoc
    
        it = p.tail();
        it = it->left;
        std::cout << "Inserting after " << it->val
                  << " value " << it->val+.5 << std::endl;
        p.insert_after(it, it->val+.5); //them truoc
    
        // duyet danh sach theo lien ket phai
        std::cout << "\nList contains: ";
        for (it = p.head(); it; it = it->right)
            std::cout << it->val << "  ";
        std::cout << std::endl;
    
        // duyet danh sach theo lien ket trai
        std::cout << "List contains (backwards): ";
        for (it = p.tail(); it; it = it->left)
            std::cout << it->val << "  ";
        std::cout << std::endl;
    
        // xoa 1 nut (o dau danh sach)
        p.pop_front();  //1.5 2 3 4 5 5.5 6
    
        // xoa 1 nut (o cuoi danh sach)
        p.pop_back();  //1.5 2 3 4 5 5.5
    
        // xoa 1 nut (o giua danh sach)
        it = p.head();
        it = it->right;
        std::cout << "\nDeleting " << it->val << std::endl;
        p.erase(it);
    
        // in ra ket qua
        std::cout << "\nList contains: ";
        for (it = p.head(); it; it = it->right)
            std::cout << it->val << "  ";
        std::cout << std::endl;
    
        // sua 1 nut
        it = p.head();
        it->val += .5;
        it = p.tail();
        it->val = 6;
    
        // in ra ket qua
        std::cout << "\nList contains: ";
        for (it = p.head(); it; it = it->right)
            std::cout << it->val << "  ";
        std::cout << std::endl;
    }

  2. #2
    Ngày gia nhập
    04 2013
    Nơi ở
    KTX B5 - Đại học BK Hà Nội
    Bài viết
    1

    Lỗi gì vậy bạn, mình test thử thấy cũng ổn mà
    Happy coding!

Các đề tài tương tự

  1. Trả lời: 3
    Bài viết cuối: 11-04-2012, 09:26 AM
  2. Cấu trúc dữ liệu Thêm nút và In nút trong binary tree, ai giúp em với.
    Gửi bởi HacAmThienThan trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 5
    Bài viết cuối: 24-10-2011, 04:12 PM
  3. Chèn nút trong danh sách liên kiết đơn!!
    Gửi bởi no.1_ctk34 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 8
    Bài viết cuối: 11-10-2011, 10:22 PM
  4. Lập trình C Cách sắp xếp các nút trong danh sách liên kết kép theo yêu cầu?
    Gửi bởi tuant2n trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 20-03-2011, 06:00 PM
  5. Xóa nút đầu tiên trong danh sách liên kết có giá trị bằng x?
    Gửi bởi 271_1989 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 29-07-2009, 03:01 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn