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

Đề tài: [C++] Cho mình hỏi chút về DSLK đơn.

  1. #1
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Mặc định [C++] Cho mình hỏi chút về DSLK đơn.

    PHP Code:
    #include <iostream.h>
    #include <conio.h>

    class Node
    {
        private:
           
    float data;
          
    Node *next;
       public:
           
    Node()
          {
               
    data 0;
             
    next NULL;
          }
          
    Node(float x)
          {
               
    data x;
             
    next NULL;
          }
          
    void setnext(Node *p)
          {
               
    next p;
          }
          
    Node *getnext()
          {
               return 
    next;
          }
          
    void setdata(float x)
          {
               
    data x;
          }
          
    float getdata()
          {
               return 
    data;
          }
    };

    class List
    {
          private:
           
    Node *head;
       public:
           List()
          {
    head NULL;}
          List(
    Node *x)
          {
    head x;}

          
    void chenxapxep(float x)
          {
              
    Node *p,*q;
             
    = new Node(x);
               
    head;
               if(
    head == NULL)
                 
    head p;
             else
             {
                 if(
    p->getdata() < head->getdata())
                {
                     
    p->setnext(head);
                     
    head p;
                }
                else
                {
                     while(
    q->getnext() )
                   {
                        if((
    p->getdata() > q->getdata()) && (p->getdata() < q->getnext()->getdata()))
                      {
                           
    p->setnext(q->getnext());
                         
    q->setnext(p);
                      }

                      
    q->getnext();
                   }
                }
             }
          }

          
    void show()
          {
              
    Node head// cho p = head
             
    if( head != NULL)
             {
                 while(
    p->getnext() != NULL)  //kiem tra den chung nao p = Null
                
    {
                     
    cout<<p->getdata()<<"  ";// hien ra data cua p
                   
    p->getnext(); // lai cho no tro den node tiep theo;
                
    }
             }
          }
    };

    void main()
    {
        
    float so;
        List 
    p;
       do
       {
            
    cout<<"Nhap vao so: ";
          
    cin>>so;
          
    p.chenxapxep(so);
       }while(
    so != 0);
       
    p.show();
         
    getch();

    Cho mình hỏi chút, cái hàm vừa chèn vừa xắp xếp của mình chạy toàn bị sai ko biết có lỗi cú pháp nào không mong các đại ca sửa dùm em.
    Đã được chỉnh sửa lần cuối bởi iamvtn : 17-05-2007 lúc 10:22 AM. Lý do: Bổ sung.

  2. #2
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Có một số lỗi mình đã sửa ở dưới. Bạn nên bổ sung cho danh sách một nút đầu (head thường chứa số phần tử) một nút cuối (z có next trỏ tới chính nó). Khi kết nạp thêm phần tử sẽ không cần quan tâm nó có phải phần tử đầu không, tạo thêm nút z khi kiểm tra kết thúc sẽ không phụ thuộc vào null nữa thậm chí có thể để nút z trỏ lại head để dùng luôn head duyệt, khi duyệt xong ta quay trở lại nút đầu ( có thể làm vậy vì ta biết trước số phần tử chứa trong head )
    PHP Code:
    #include <iostream.h>
    #include <conio.h>

    class Node
    {
        private:
           
    float data;
          
    Node *next;
       public:
           
    Node()
          {
               
    data 0;
             
    next NULL;
          }
          
    Node(float x)
          {
               
    data x;
             
    next NULL;
          }
          
    void setnext(Node *p)
          {
               
    next p;
          }
          
    Node *getnext()
          {
               return 
    next;
          }
          
    void setdata(float x)
          {
               
    data x;
          }
          
    float getdata()
          {
               return 
    data;
          }
    };

    class List
    {
          private:
           
    Node *head;
       public:
           List()
          {
    head NULL;}
          List(
    Node *x)
          {
    head x;}

          
    void chenxapxep(float x)
          {
              
    Node *p,*q;
         
    = new Node(x);
           
    head;
           if(
    head == NULL)
             
    head p;
         else
         {
             if(
    p->getdata() < head->getdata())
            {
             
    p->setnext(head);
             
    head p;
            }
            else
            {
             while (( 
    q->getnext() != NULL ) && (q->getdata() < p->getdata())) //moi sua
                
    q->getnext();
              
    /*  if((p->getdata() > q->getdata()) && (p->getdata() < q->getnext()->getdata()))
              //Khong xu ly duoc truong hop no la cuoi day
              {
                   p->setnext(q->getnext());
                 q->setnext(p);
              }
              */
             
    p->setnext(q->getnext());
             
    q->setnext(p);

            }
         }
          }

          
    void show()
          {
              
    Node *head// cho p = head
             
    if( head != NULL)
         {
             
    /*
             //Nhu the nay den phan tu cuoi cung se bi thieu
             while(p->getnext() != NULL)  //kiem tra den chung nao p = Null
            {
             cout<<p->getdata()<<"  ";// hien ra data cua p
               p = p->getnext(); // lai cho no tro den node tiep theo;
            }
    */
             
    while(!= NULL)  //kiem tra den chung nao p = Null
            
    {
             
    cout<<p->getdata()<<"  ";// hien ra data cua p
               
    p->getnext(); // lai cho no tro den node tiep theo;
            
    }

         }
          }
    };

    void main()
    {
        
    float so;
        List 
    p;
       do
       {
            
    cout<<"Nhap vao so: ";
          
    cin>>so;
          
    p.chenxapxep(so);
       }while(
    so != 0);
       
    p.show();
         
    getch();


  3. #3
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Cảm ơn bác. Nhưng như bác nói bên trên thì nó trở thành DSLK kép rồi. Mà bài này Thầy yêu cầu làm bằng danh sách liên kết đơn thôi (với cả bọn em chưa học đế DSLK kép bác ạ).
    Bài của bác sửa dùm em vẫn bị sai phần sắp xếp.
    Nhưng em sẽ cố gắng sửa, vẫn ko được thì lại nhờ bác tiếp.
    Thank bác nhiều nha.

  4. #4
    Ngày gia nhập
    04 2007
    Bài viết
    128

    È!! DSLK đơn mà, kép thì phải có next và prev, mà làm j` có thấy prev đâu??

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

  1. hỏi 1 chút về dslk, chỉ giáo dùm mình
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 03-06-2013, 01:15 PM
  2. Lỗi xóa DSLK sau khi xử lí DSLK trong hàm.
    Gửi bởi darkboys trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 01-05-2013, 01:24 AM
  3. Chèn 1 node vào DSLK đôi (tăng dần ) để được 1 DSLK đôi ( tăng dần ) ?
    Gửi bởi phanxuanbanglhu trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 2
    Bài viết cuối: 29-11-2011, 03:11 PM
  4. Chuyển từ DSLK đơn sang DSLK kép
    Gửi bởi thaihoa91 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: 04-05-2011, 07:47 PM
  5. Code cài đặt DSLK đơn vòng và kép vòng trên C++. Thêm 1 phần tử sau 1 phần tử trong DSLK đơn/kép
    Gửi bởi hoanghieu.fit.hcmus trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 09-04-2011, 02:54 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