kết quả từ 1 tới 2 trên 2

Hỏi về danh sách liên kết đơn

  1. #1
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 359540
    Giới tính: Nam
    Bài gửi
    2

    Hỏi về danh sách liên kết đơn

    mong được các anh chị giúp đỡ ạ. Em đang học danh sách liên đơn và bị vướng ở bài chèn 1 phần tử sau q. Mong các anh chị chỉ giúp em lỗi với ạ, em xin cảm ơn các anh chị đã xem bài.

    #include<stdio.h>
    #include<stdlib.h>


    typedef struct Sinhvien
    {
    char Ten[30];
    int MaSV;
    }SV;
    struct Node
    {
    int data;
    Node* link;
    };
    struct List
    {
    Node* first;
    Node* last;
    };
    Node* GetNode(int x)
    {
    Node* p=new Node;
    if(p==NULL)
    {
    printf("Khong cap phat duoc!!!");
    exit(1);
    }
    p ->data=x;
    p ->link=NULL;
    return p;
    }
    void Init(List &l)
    {
    l.first=l.last=NULL;
    }
    void AddFirst(List &l, Node* new_node)
    {
    if(l.first==NULL)
    {
    l.first=new_node;
    l.last=l.first;
    }
    else
    {
    new_node->link=l.first;
    l.first=new_node;
    }
    }
    void AddAfter(List &l,Node *q, Node* new_node)
    {
    if(q!=NULL)
    {
    new_node->link=q->link;
    q->link=new_node;
    if(q==l.last)
    l.last=new_node;
    }
    else
    AddFirst(l,new_node);
    }
    void InsertAfter(List &l,Node *q, int x)
    {
    Node* p=GetNode(x);
    if(p==NULL)return;
    if(q!=NULL)
    {
    p->link=q->link;
    q->link=p;
    if(q==l.last)
    l.last=p;
    }
    else
    AddFirst(l,p);
    }
    void XuatDS(List l)
    {
    Node* p=l.first;
    printf("\ndanh sach da nhap la: \n");
    while (p!=NULL)
    {
    printf("%d\t",p->data);
    p=p->link;
    }
    printf("\n");
    }
    int main()
    {
    List l;
    Init(l);
    int n;
    printf("nhap n: ");
    scanf("%d", &n);
    for(int i=0;i<n;i++)
    {
    int x;
    printf("\nnhap phan tu thu %d: ", i+1);
    scanf("%d", &x);
    }
    int q;
    Node *x;
    printf("\nNhap vi tri phan tu q: ");
    scanf("%d", &q);
    printf("\nNhap phan tu can them: ");
    scanf("%d", &x);
    InsertAfter(l,x,q);
    printf("\nDanh sach sau khi them la: \n");
    XuatDS(l);
    }
    Quick reply to this message Trả lời       


  2. #2
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: Hỏi về danh sách liên kết đơn

    function cho nhập vào 1 phần tử sau vị trí nào đó thì cần phải có vòng 'for' tìm đến vị trí đó rồi tạo node mới gán vào chứ.
    Mã:
     void insertAfter(List &l, int pos, int x) ...
    LCD: 13.3" 1920x1080 IPS
    CPU: Intel i7 - 4700MQ (2.4 GHz - 3.4 GHz)
    GPU: Nvidia GTX 765m with GDDR5 2GB
    RAM: 2x8GB G.Skill 2133
    HDD: Samsung SSD 850 Pro 512 GB
    2 kg.