ctdl-06--danh sách liên kết.pdf

16
Danh sách liên kết (Linked List) Đọc các phần 3.2, 3.3 & 3.5 Giảng viên: Nguyễn Mạnh Hiển Khoa Công nghệ thông tin Trường Đại học Thủy Lợi Email: [email protected] Học kỳ 2, năm học 2014-2015

Upload: hoang

Post on 07-Nov-2015

46 views

Category:

Documents


2 download

TRANSCRIPT

  • Danh sch lin kt (Linked List) c cc phn 3.2, 3.3 & 3.5

    Ging vin: Nguyn Mnh Hin Khoa Cng ngh thng tin Trng i hc Thy Li Email: [email protected]

    Hc k 2, nm hc 2014-2015

  • Cc yu cu i vi danh sch lin kt

    Chn v xa phn t mt cch hiu qu

    Xa tt c cc phn t

    Ton t gn

    Cc ton t so snh

    Hm to/hm hy

    Lp mu (dng chung cho nhiu kiu phn t)

    C ch hiu qu duyt cc phn t

  • Danh sch lin kt n

    Thi gian chy cho cc thao tc ?

    push_front / push_back (thm vo u/cui DS)

    pop_front / pop_back (xa khi u/cui DS)

    insert / erase (chn/xa gia DS)

    u DS Cui DS

  • Danh sch lin kt n

    insert

    erase

  • Danh sch lin kt i

  • Ci t danh sch bng C++ Th vin chun C++ c lp list:

    nh ngha trong tp tiu list

    #include

    ci t di dng danh sch lin kt i

    Sau y chng ta s t ci t danh sch:

    cng di dng danh sch lin kt i

    nhng t tn l List (ch L hoa) phn bit vi list trong th vin chun C++

  • Giao din public ca List (1)

    Hm to, hm hy, ton t gn:

    List(); // hm to List(const List &rhs); // hm to sao chp

    ~List(); // hm hy

    const List & operator= (const List &rhs);

    Cc phng thc ch c (read-only): int size() const; // s phn t

    bool empty() const; // danh sch rng?

  • Giao din public ca List (2)

    Truy nhp phn t: Object & front(); // phn t u

    Object & back(); // phn t cui

    const Object & front() const; // phin bn hng

    const Object & back() const; // phin bn hng

    Truy nhp v tr dng iterator: iterator begin(); // v tr phn t u

    iterator end(); // v tr sau phn t cui

    const_iterator begin() const; // phin bn hng

    const_iterator end() const; // phin bn hng

  • Giao din public ca List (3) Cc phng thc x l danh sch:

    int push_front(const Object & x); // thm vo u

    int push_back(const Object & x); // thm vo cui

    int pop_front(); // xa u

    int pop_back(); // xa cui

    // chn x vo trc phn t xc nh bi itr

    iterator insert(iterator & itr, const Object &x);

    iterator erase(iterator itr); //xa v tr itr

    // xa t start n trc end (khng tnh end)

    iterator erase(iterator start, iterator end);

    void clear(); // xa rng danh sch

  • Yu cu thi gian chy (1)

    Thi gian chy O(1):

    Hm to ngm nh

    push_front(x), push_back(x)

    pop_front(), pop_back()

    insert(itr, x), erase(itr)

    begin(), end()

    front(), back()

    size(), empty()

  • Yu cu thi gian chy (2)

    Thi gian chy O(n):

    Hm to sao chp

    Hm hy

    clear()

    erase(start, end)

  • Giao din public ca iterator

    Cc ton t ch c (bng/khc/ly tham chiu) int operator== (const iterator & rhs) const;

    int operator!= (const iterator & rhs) const;

    Object & operator* ( ) const;

    Cc ton t ghi (tng/gim iterator) iterator & operator++ ( ); // tin t

    iterator operator++ (int); // hu t

    iterator & operator-- ( ); // tin t

    iterator operator-- (int); // hu t

    Yu cu thi gian chy O(1)

  • Ci t List

    Danh sch lin kt i vi cc nt head v tail

    Danh sch rng

  • Cc nt (node) trong danh sch

    struct Node

    {

    Object data;

    Node *prev;

    Node *next;

    Node(const Object &d = Object(),

    Node * p = NULL, Node * n = NULL)

    : data(d), prev(p), next(n) { }

    };

    data

    prev

    next

    data

    prev

    next

    data

    prev

    next

    Khng cn cp pht b nh lin tc

  • Thao tc chn (insert)

  • Thao tc xa (erase)