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

Đề tài: In ra danh sách rỗng khi đã nhập danh sách - Linked List trong lập trình C++

  1. #1
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mặc định In ra danh sách rỗng khi đã nhập danh sách - Linked List trong lập trình C++

    C++ Code:
    1. #include <iostream.h>
    2. #include <iomanip.h>
    3.  
    4.  
    5. struct Node
    6. {
    7.     int gt;
    8.     Node*next;
    9. };
    10. void makenull(Node**l)
    11. {
    12.     *l=NULL;
    13. }
    14. void menu()
    15. {
    16.     cout<<"\n1.Nhap";
    17.     cout<<"\n2.In";
    18.     cout<<"\n3.Thoat";
    19. }
    20. void AddLinkeList(Node**l,int x)
    21. {
    22.     Node*p,*q;
    23.     p=new Node;
    24.     p->next=NULL;
    25.     p->gt=x;
    26.     q=*l;
    27.     if(q==NULL)
    28.         q=p;
    29.     else
    30.     {
    31.         while (q!=NULL)
    32.         {
    33.             q=q->next;
    34.         }
    35.         q=p;
    36.     }
    37. }
    38. void display(Node **l)
    39. {
    40.    
    41.     Node *p;
    42.     p=*l;
    43.     if (p==NULL)
    44.     {
    45.         cout<<"Danh sach rong:\n";
    46.     }
    47.     else
    48.     {
    49.         while (p!=NULL)
    50.         {
    51.             cout<<setw(3)<<p->gt;
    52.             p=p->next;
    53.         }
    54.     }
    55. }
    56. void main()
    57. {
    58.     Node *p;
    59.     int lc;
    60.     int x;
    61.     makenull(&p);
    62.     do
    63.     {
    64.         menu();
    65.         cout<<"\nNhap lua chon cua ban:";
    66.         cin>>lc;
    67.         switch(lc)
    68.         {
    69.         case 1:
    70.             cout<<"Nhap gia tri:\n";
    71.             do
    72.             {
    73.                 cin>>x;
    74.                 if(x!=-1)
    75.                     AddLinkeList(&p,x);
    76.             } while(x!=-1);
    77.             break;
    78.         case 2:
    79.             display(&p);
    80.             break;
    81.         }
    Tại sao sau khi nhập các giá trị cho các node,tôi cho in ra vẫn báo danh sách rỗng?
    Đã được chỉnh sửa lần cuối bởi dieucay555 : 04-03-2008 lúc 12:18 AM. Lý do: em gõ nhầm 2 biến p,q ở hàm AddLiskedList.Các bác thông cảm
    Cánh Chym ứ mỏi

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Bạn xem lại chỗ này nè:

    Node*p,*q;
    p=new Node;
    p->next=NULL;
    p->gt=x;
    p=*l;
    if(p==NULL)
    p=q;
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  3. #3
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Trích dẫn Nguyên bản được gửi bởi NT_OnlyLove Xem bài viết
    Bạn xem lại chỗ này nè:
    Chỗ ấy làm sao hả bạn?Có thể nói rõ hơn không?Tớ thấy chỗ ấy ổn mà
    Cánh Chym ứ mỏi

  4. #4
    Ngày gia nhập
    05 2007
    Nơi ở
    UNS
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi dieucay555 Xem bài viết
    Code:
    #include <iostream.h>
    #include <iomanip.h>
    struct Node
    {
        int gt;
        Node*next;
    };
    void makenull(Node**l)
    {
        *l=NULL;
    }
    void menu()
    {
        cout<<"\n1.Nhap";
        cout<<"\n2.In";
        cout<<"\n3.Thoat";
    }
    void AddLinkeList(Node**l,int x)
    {
         Node*p,*q;
        p=new Node;
        p->next=NULL;
        p->gt=x;
        p=*l;
        if(p==NULL)
            p=q;
        else
        {
            while (p!=NULL)
            {
                p=p->next;
            }
            p=q;
        }
    }
    void display(Node **l)
    {
        
        Node *p;
        p=*l;
        if (p==NULL)
        {
            cout<<"Danh sach rong:\n";
        } 
        else
        {
            while (p!=NULL)
            {
                cout<<setw(3)<<p->gt;
                p=p->next;
        }
        }
    }
    void main()
    {
        Node *p;
        int lc;
        int x;
        makenull(&p);
        do 
        {
            menu();
            cout<<"\nNhap lua chon cua ban:";
            cin>>lc;
            switch(lc)
            {
            case 1:cout<<"Nhap gia tri(-1) de ket thuc:\n";
                do 
                {
                    cin>>x;
                    if(x!=-1)
                        AddLinkeList(&p,x);
                } while(x!=-1);
                break;
            case 2:
                display(&p);
                break;
            }
        } while(lc!=3);
    }
    Tại sao sau khi nhập các giá trị cho các node,tôi cho in ra vẫn báo danh sách rỗng?

    Ko hiểu lắm chỗ bạn viết , nhưng mà có cảm giác là hình như nó ko chính xác, vì khi nó vừa đc khởi tạo xong và gán giá trị, chưa gì hết thì lại gán nó bằng 1 thằng khác , dĩ nhiên là giá trị cũ sẽ bị mất.

    Hình như bạn viết nhầm, khi xem kĩ lại thấy giá trị q được khai báo nhưng ko đc new mà lại đem gán lung tung. Nó chưa báo Unhandle Exception là may . Có gì bạn nên comment vào những chỗ khó hiểu, sau này kiểm tra lại đỡ mệt hơn, nếu ko comment có khi chính mình viết ra còn ko biết nó là cái gì nữa

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Trích dẫn Nguyên bản được gửi bởi Z3roXIII Xem bài viết
    Ko hiểu lắm chỗ bạn viết , nhưng mà có cảm giác là hình như nó ko chính xác, vì khi nó vừa đc khởi tạo xong và gán giá trị, chưa gì hết thì lại gán nó bằng 1 thằng khác , dĩ nhiên là giá trị cũ sẽ bị mất.

    Hình như bạn viết nhầm, khi xem kĩ lại thấy giá trị q được khai báo nhưng ko đc new mà lại đem gán lung tung. Nó chưa báo Unhandle Exception là may . Có gì bạn nên comment vào những chỗ khó hiểu, sau này kiểm tra lại đỡ mệt hơn, nếu ko comment có khi chính mình viết ra còn ko biết nó là cái gì nữa
    Xin lỗi bạn ,chỗ AddLinkedList tớ làm nhầm,code tớ sửa lại như sau:
    C++ Code:
    1. #include <iostream.h>
    2. #include <iomanip.h>
    3.  
    4. struct Node
    5. {
    6.     int gt;
    7.     Node*next;
    8. };
    9. void makenull(Node**l)
    10. {
    11.     *l=NULL;
    12. }
    13. void menu()
    14. {
    15.     cout<<"\n1.Nhap";
    16.     cout<<"\n2.In";
    17.     cout<<"\n3.Thoat";
    18. }
    19. void AddLinkeList(Node**l,int x)
    20. {
    21.     Node*p,*q;
    22.     p=new Node;
    23.     p->next=NULL;
    24.     p->gt=x;
    25.     q=*l;
    26.     if(q==NULL)
    27.         q=p;
    28.     else
    29.     {
    30.         while (q!=NULL)
    31.         {
    32.             q=q->next;
    33.         }
    34.         q=p;
    35.     }
    36. }
    37. void display(Node **l)
    38. {
    39.    
    40.     Node *p;
    41.     p=*l;
    42.     if (p==NULL)
    43.     {
    44.         cout<<"Danh sach rong:\n";
    45.     }
    46.     else
    47.     {
    48.         while (p!=NULL)
    49.         {
    50.             cout<<setw(3)<<p->gt;
    51.             p=p->next;
    52.     }
    53.     }
    54. }
    55. void main()
    56. {
    57.     Node *p;
    58.     int lc;
    59.     int x;
    60.     makenull(&p);
    61.     do
    62.     {
    63.         menu();
    64.         cout<<"\nNhap lua chon cua ban:";
    65.         cin>>lc;
    66.         switch(lc)
    67.         {
    68.         case 1:
    69.             cout<<"Nhap gia tri:\n";
    70.             do
    71.             {
    72.                 cin>>x;
    73.                 if(x!=-1)
    74.                     AddLinkeList(&p,x);
    75.             } while(x!=-1);
    76.             break;
    77.         case 2:
    78.             display(&p);
    79.             break;
    80.         }
    81.     } while(lc!=3);
    82. }
    Cái tớ thắc mắc là sao bây giờ hàm AddLinkList của tớ đã đúng rồi nhưng sao khi gọi hàm Display để in cái danh sách ra vẫn báo là danh sách rỗng?
    Cánh Chym ứ mỏi

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định In ra danh sách rỗng khi đã nhập danh sách - Linked List trong lập trình C++

    Cậu có cái link nào giữ cái List đó không mà bảo nó không báo rỗng ??? Mới tập viết thì làm ơn dùng reference to pointer cũng được rồi, đua đòi pointer to pointer làm gì cho khổ thế, viết thế này thì có debug mà khóc. Đặt tên biến kiểu này thì không biết ai rảnh mà chấm bài cho cậu nhỉ ? Chẳng lẽ thầy cậu cho cậu đặt tên lc, bc thế à ? p là gì, q là gì ? No comment + Variable is a letter --> It's not code for human reading !!! Làm ơn học cách đặt tên biến dùmg 1 cái :
    Example :
    C++ Code:
    1. #include<iostream>
    2. #include<cstdlib>
    3.  
    4. using namespace std;
    5.  
    6. struct LLNode{
    7.     int data;
    8.     struct LLNode *__ptr;
    9. };
    10.  
    11. struct LLNode *_mCurrentLink = NULL;
    12.  
    13. void AddNodeToList(int item)
    14. {
    15.     LLNode *_firstLink, *_firstLink2;
    16.     _firstLink = new LLNode;
    17.     _firstLink->data = item;
    18.     _firstLink->__ptr = NULL;
    19.  
    20.     if(_mCurrentLink == NULL)
    21.     {
    22.         _mCurrentLink = _firstLink;
    23.     }
    24.     else
    25.     {
    26.         _firstLink2 = _mCurrentLink;
    27.         while(_firstLink2->__ptr != NULL)
    28.             _firstLink2 = _firstLink2->__ptr;
    29.         _firstLink2->__ptr = _firstLink;
    30.     }
    31. }
    32.  
    33. void TraverseList()
    34. {
    35.     LLNode *_firstLink;
    36.     _firstLink = _mCurrentLink;
    37.    
    38.     cout << endl << '\t' << "[Data]" << '\t' << "[Address]" << endl;
    39.     cout << "\t+++++++++++++++++" << endl;
    40.  
    41.     do{
    42.         if(_firstLink == NULL)
    43.             cout<<"No list to display";
    44.         else{
    45.             cout << endl;
    46.             cout << '\t' << _firstLink->data;
    47.             cout << '\t' << _firstLink->__ptr << endl;
    48.             _firstLink = _firstLink->__ptr;
    49.         }
    50.     }while(_firstLink!=NULL);
    51. }
    52.  
    53. void DeleteANode()
    54. {
    55.     LLNode *_firstLink;
    56.     if(_mCurrentLink == NULL)
    57.         cout << "Empty List !!!" << endl;
    58.     else{
    59.         _firstLink = _mCurrentLink;
    60.         _mCurrentLink = _mCurrentLink->__ptr;
    61.         delete _firstLink;
    62.         cout << _firstLink->data << "has been deleted\n";
    63.     }
    64. }
    65.  
    66. int main()
    67. {
    68.     AddNodeToList(5);
    69.     AddNodeToList(1);
    70.     AddNodeToList(6);
    71.     AddNodeToList(7);
    72.     TraverseList();
    73.     return 0;
    74. }

  7. #7
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Cậu có cái link nào giữ cái List đó không mà bảo nó không báo rỗng ??? Mới tập viết thì làm ơn dùng reference to pointer cũng được rồi, đua đòi pointer to pointer làm gì cho khổ thế, viết thế này thì có debug mà khóc. Đặt tên biến kiểu này thì không biết ai rảnh mà chấm bài cho cậu nhỉ ? Chẳng lẽ thầy cậu cho cậu đặt tên lc, bc thế à ? p là gì, q là gì ? No comment + Variable is a letter --> It's not code for human reading !!! Làm ơn học cách đặt tên biến dùmg 1 cái :
    Example :
    C++ Code:
    1. #include<iostream>
    2. #include<cstdlib>
    3.  
    4. using namespace std;
    5.  
    6. struct LLNode{
    7.     int data;
    8.     struct LLNode *__ptr;
    9. };
    10.  
    11. struct LLNode *_mCurrentLink = NULL;
    12.  
    13. void AddNodeToList(int item)
    14. {
    15.     LLNode *_firstLink, *_firstLink2;
    16.     _firstLink = new LLNode;
    17.     _firstLink->data = item;
    18.     _firstLink->__ptr = NULL;
    19.  
    20.     if(_mCurrentLink == NULL)
    21.     {
    22.         _mCurrentLink = _firstLink;
    23.     }
    24.     else
    25.     {
    26.         _firstLink2 = _mCurrentLink;
    27.         while(_firstLink2->__ptr != NULL)
    28.             _firstLink2 = _firstLink2->__ptr;
    29.         _firstLink2->__ptr = _firstLink;
    30.     }
    31. }
    32.  
    33. void TraverseList()
    34. {
    35.     LLNode *_firstLink;
    36.     _firstLink = _mCurrentLink;
    37.    
    38.     cout << endl << '\t' << "[Data]" << '\t' << "[Address]" << endl;
    39.     cout << "\t+++++++++++++++++" << endl;
    40.  
    41.     do{
    42.         if(_firstLink == NULL)
    43.             cout<<"No list to display";
    44.         else{
    45.             cout << endl;
    46.             cout << '\t' << _firstLink->data;
    47.             cout << '\t' << _firstLink->__ptr << endl;
    48.             _firstLink = _firstLink->__ptr;
    49.         }
    50.     }while(_firstLink!=NULL);
    51. }
    52.  
    53. void DeleteANode()
    54. {
    55.     LLNode *_firstLink;
    56.     if(_mCurrentLink == NULL)
    57.         cout << "Empty List !!!" << endl;
    58.     else{
    59.         _firstLink = _mCurrentLink;
    60.         _mCurrentLink = _mCurrentLink->__ptr;
    61.         delete _firstLink;
    62.         cout << _firstLink->data << "has been deleted\n";
    63.     }
    64. }
    65.  
    66. int main()
    67. {
    68.     AddNodeToList(5);
    69.     AddNodeToList(1);
    70.     AddNodeToList(6);
    71.     AddNodeToList(7);
    72.     TraverseList();
    73.     return 0;
    74. }
    Tớ biết rồi,vì đặt p,q nên mới nhầm chỗ nhập.Cái tật đặt tên linh tinh thế này sẽ cố bỏ.code cậu demo nếu muốn nhập nhiều node hơn cho Linked List thì sao?tớ thấy cách cậu AddNode như thế chưa thật hay lắm.Thanks
    Cánh Chym ứ mỏi

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

  1. Danh sách liên kết cơ bản | Linked list basic
    Gửi bởi Kevin Hoang trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 20-11-2016, 10:26 PM
  2. Danh sách liên kết vòng (Circular Linked List)
    Gửi bởi iamvtn trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 2
    Bài viết cuối: 14-06-2014, 11:06 PM
  3. hàm hủy(list::~list()) trong danh sách móc nối đối tượng xử lý những gì?
    Gửi bởi Emerald214 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 29-12-2010, 09:05 AM
  4. tạo 1 danh sách liên kết đơn(Linked List) mới ntn???
    Gửi bởi nhocconan.91 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 15-10-2010, 06:36 AM
  5. linked list | Danh sách liên kết | Lỗi do đâu?
    Gửi bởi xai1lanroibo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 03-05-2009, 03:01 PM

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