Đăng Nhập

Vui lòng khai báo chính xác tên truy cập và mật khẩu!

Quên mật khẩu?

Đăng Ký

Bạn phải điền đầy đủ thông tin đăng ký!

  

[CTDL VÀ GT]Danh sách liên kết đơn - Lý thuyết cơ bản và cách triển khai

    avatar

    Bài viết Bài viết : 8

    Danh vọng Danh vọng : 7987

    Uy tín Uy tín : 5

    Huy hiệu : vip,like,top,admin,photo,music,support,event,design,iron,loki

    #1

     on Wed Mar 18, 2015 10:00 pm 

    Các thao tác trên danh sách liên kết đơn(single-link list)
    Code:

    //c
    struct tq {
    thtin_t phantu;
    struc tq*tiep;
    };
    typedef struct tq tq_t;

    2.Con trỏ tới 1 node
    Code:

    //c
    struct  node {
            int infor;
            struct node *next;
        };
        typedef struct node *NODEPTR;

    3.Cấp phát bộ nhớ cho 1 node
    Code:

    //c
    NODEPTR Getnode(void) {
        NODEPTR p;
        P = (NODEPTR) malloc(sizeof( struct node));
        Return(p);
    }

    4.Giải phóng 1 node
    Code:

    //c
    NODEPTR Freenode( NODEPTR p){
            free(p);
        }

    5.Thêm phần tử vào đỉnh danh sách
    Code:

    //c
    void Push_Top( NODEPTR *plist, int x) {
        NODEPTR p;
        p= Getnode();
        p -> infor = x;
        p ->next = *plist;
        *plist = p;
    }

    6.Thêm node mới vào cuối danh sách
    Code:

    //c
    void Push_Bottom( NODEPTR *plist, int x) {
        NODEPTR p, q;
        p= Getnode(); //
        p->infor = x;
        q = *plist;
        while (q-> next != NULL)
            q = q -> next;
      
        q -> next = p;
        p ->next = NULL;
    }

    7.Thêm node mới vào giữa danh sách
    Code:

    //c
    void Push_Before( NODEPTR p, int x ){
        NODEPTR q;
        if (p->next==NULL)
            Push_Bottom(p, x);
        else {
            q= Getnode();
            q -> infor = x;
            q-> next = p-> next;    
            p->next = q;
        }
    }

    8.Xóa 1 node đầu danh sách
    Code:

    //c
    void Del_Top( NODEPTR *plist) {
        NODEPTR p;
        p = *plist;
        if (p==NULL) return;
        (*plist) = (*plist) -> next;
        p-> next = NULL;
        Freenode(p);
    }

    9.Xóa node cuối danh sách
    Code:

    //c
    void Del_Bottom(NODEPTR *plist) {
        NODEPTR p, q;
        if (*plist==NULL) return;
        else if ( (*plist)->next==NULL))  
            Del_Top(plist);
        else {
            p = *plist;
            while (p->next!=NULL){
                q = p;
                p = p->next;
            }
            // p lµ node cuèi danh s¸ch;
            q->next =NULL;
            Freenode(p);
        }
    }

    10.Xóa node giữa danh sách
    Code:

    //c
    void Del_before(NODEPTR p){
        NODEPTR q;
        if (p->next==NULL) return;
        q = p ->next;
        p->next = q->next;
        Freenode(q);
    }


    Ngoài ra các thao tác duyệt danh sách, tìm kiếm trên danh sách...(mình sẽ giới thiệu sau)
    chúc các bạn thành công :v
    [You must be registered and logged in to see this link.] [You must be registered and logged in to see this link.]#source-code
    Bạn không có quyền trả lời bài viết