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

Đề tài: Thắc mắc về DSLK đơn

  1. #1
    Ngày gia nhập
    12 2006
    Bài viết
    8

    Unhappy Thắc mắc về DSLK đơn

    em mới học về DSLK...lý thuyết..gọi là tạm hiểu rồi ...
    giờ có 2 vần đề mong các bác giải thích dùm(nghĩ hoài ko ra ...)
    Em nghĩ nếu giải đáp đựoc 2 khúc mắc này thì ...học DSLK phần sau sẽ dễ hiếu hơn.Mong các bác giúp đỡ
    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #include<stdlib.h>
    typedef struct sn
    {int a;
     sn * pnext;
     };
    typedef struct list
    {sn * phead;
     sn * ptail;
    } ;
    void nhap(sn & x)
    {cout<<"Nhap phan tu vao"<<endl;
     cin>>x.a;
    }
    void xuat(sn x)
    {
      cout<<x.a<<endl;
    }
    sn *getsn(int x)
    {sn * p;
     p=new sn;
     if(p==NULL)
      {cout<<"Ko du vung nho"<<endl;
       exit(1);
      }
     else
      {p->a=x;
       p->pnext=NULL;
      }
      return p;
    }
    void addfirt(list & l,sn *ele)
    {if(l.phead==NULL)
      {l.phead=ele;
       l.ptail=l.phead;
      }
     else
      {ele->pnext=l.phead;
       l.phead=ele;
      }
     }
    void add(list & l,sn *p,sn * q)
    {if(q!=NULL)
      {p->pnext=q->pnext;
       q->pnext=p;
         if(q==l.ptail)
    	l.ptail=p;
      }
     else
      addfirt(l,p);
    }
    void main()
    {clrscr();
     int i,n;
     sn x;
     list l;
     sn * p;
     sn * q;
     sn * phead;
     l.phead=NULL;
     sn * tam;
     cout<<"Nhap so node vao"<<endl;
     cin>>n;
     for(i=0;i<n;i++)
     {
      nhap(x)   ;
      addfirt(l,getsn(x.a));
      }
    i=0;
    cout<<"Nhap du lieu cho node can chen"<<endl;
    nhap(x);
    q=getsn(x.a);
    cout<<"Muon chen vao vitri nao?" <<endl;
    cin>>n;
    p=l.phead;
    while((p!=NULL)&&(i<n-2))
    {p=p->pnext; i=i+1;
    }
    add(l,q,p);
    cout<<"Xuat danh sach sau khi chen:"<<endl;
    tam=l.phead;
    while(tam!=NULL)
    {
     xuat(*tam);
     tam=tam->pnext ;
     }
     getch();
    }
    Đó cái tạm hiểu của em là thế đó..một mớ code dài dòng..nhờ các bác rút gọn dùm..em cái
    còn cái ..làm bằng class..thì sao mà nó cứ in ra so 0 đầu tiên thay vì in ra giá trị của node cuồi cùng@@
    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #include<stdlib.h>
    typedef struct sn
    {int a;
     sn * pnext;
     };
    class list
    {private :sn * phead;
    	  sn * ptail;
     public:
       list();
       friend sn*  getsn(int x);//tao ra  1node
       void addfirt(sn *ele)  ;//them node vao dau`list
       void xuat1();
    };
    
    list ::list()
    {
     phead=NULL;
     ptail=NULL;
    }
    void nhap(sn & x)
    {cout<<"Nhap phan tu vao"<<endl;
     cin>>x.a;
    }
    void xuat(sn x)
    {
      cout<<x.a<<endl;
    }
    
    void list::xuat1()
    {sn * p; int i=1;
     p=phead;
     while(p!=NULL)
       {p=p->pnext;
        xuat(*p);
       }
    }
    
    sn *getsn(int x)
    {sn * p;
     p=new sn;
     p->a=x;
     p->pnext=NULL;
     return p;
    }
    void list::addfirt(sn *p)
    {if(phead==NULL)
      { phead=p;
        ptail=phead;
      }
     else
      {p->pnext=phead;
       phead=p;
      }
    }
    
    void main()
    {clrscr();
    list l;
    sn * p;sn * q;
    sn x;
    int n;
    cout<<"Nhap so phan tu cua list"<<endl;
    cin >>n;
    for(int i=1;i<=n;i++)
     { nhap(x);
       q=getsn(x.a);
       l.addfirt(q);
     }
     l.xuat1() ;
     getch();
    }
    Đó ..trăm sự nhờ các bác..giúp đàn em với

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

    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #include<stdlib.h>
    typedef struct sn
    {int a;
     sn * pnext;
     };
    class list
    {private :sn * phead;
    	  sn * ptail;
     public:
       list();
       friend sn*  getsn(int x);//tao ra  1node
       void addfirt(sn *ele)  ;//them node vao dau`list
    
    //Nếu thêm đằng trước thì cái này gọi là stack
    // làm hàm thêm nút ở cuối, addtail(int dulieu)
    
       void xuat1();
    };
    
    list ::list()
    {
     phead=NULL;
     ptail=NULL;
    }
    void nhap(sn & x)
    {cout<<"Nhap phan tu vao"<<endl;
     cin>>x.a;
    }
    void xuat(sn x)
    {
      cout<<x.a<<endl;
    }
    
    void list::xuat1()
    {sn * p; int i=1;
     p=phead;
     while(p!=NULL)
       {//p=p->pnext; sai chỗ này
        xuat(*p);
        p=p->pnext;//phải cho nó xuống đây
       }
    }
    
    sn *getsn(int x)
    {sn * p;
     p=new sn;
     p->a=x;
     p->pnext=NULL;
     return p;
    }
    void list::addfirt(sn *p)
    {if(phead==NULL)
      { phead=p;
        ptail=phead;
      }
     else
      {p->pnext=phead;
       phead=p;
      }
    }
    
    void main()
    {clrscr();
    list l;
    sn * p;sn * q;
    sn x;
    int n;
    cout<<"Nhap so phan tu cua list"<<endl;
    cin >>n;
    for(int i=1;i<=n;i++)
     { nhap(x);
       q=getsn(x.a);
       l.addfirt(q);
     }
     l.xuat1() ;
     getch();
    }
    đây là bài rút gọn:
    PHP Code:

    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #include<stdlib.h>
    ///////////////////////////////////////////////////////////////
    typedef struct sn
    {
        
    int dulieu;
        
    struct sn *pnext;
        
    struct sn(int dulieu)// khoi tao sn    
        
    {
            
    this->dulieu=dulieu;
            
    this->pnext=NULL;
        };
    }
    sn;

    ////////////////////////////////////////////////////////////
    class list
    {
    private :
        
    sn phead;
        
    sn ptail;
    public:
        list();
        
    void addtail(int);//them nut vao cuoi list
        
    void xuat();
    };
    //////////////////////////////////////////////////////////
    list ::list()
    {
        
    phead=ptail=NULL;
    }
    ///////////////////////////////////////////////////////
    void list::xuat()
    {
        
    sn p=this->phead;

        while(
    p!=NULL)
        {
            
            
    cout<<p->dulieu<<"->";
            
    p=p->pnext;
        }
        
    cout<<"NULL";
    }
    /////////////////////////////////////////////////////////

    void list::addtail(int duLieu)//them nut o cuoi
    {
        
    //xin vung nho
        
    sn *p=new sn(duLieu);
        if (
    phead==NULL
            
    phead=ptail=p;
        else     
        {
            
            
    ptail->pnext=p;
            
    ptail=p;
        }
    }
    ////////////////////////////////////////////////////////
    void main()
    {
        list *
    l=new list();
        
    sn p;sn q;
        
    int x;
        
    int n;
        
    cout<<"Nhap so phan tu cua list"<<endl;
        
    cin >>n;
        for(
    int i=1;i<=n;i++)
        {
            
    cout<<"Nhap vao phan tu thu "<<i<<":";
            
    cin>>x;
            
    l->addtail(x);
        }
        
    l->xuat() ;
        
    cout<<endl;
        
    getch();

    Hơ, sao thấy nó dài như nhau
    Đã được chỉnh sửa lần cuối bởi soda_chanhmuoi : 03-06-2007 lúc 10:05 PM.

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

  1. 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
  2. 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
  3. khởi tạo 1 đa thức dùng dslk như thế nào? help me!
    Gửi bởi kimcho15 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 05-04-2011, 12:04 AM
  4. thật toán trôn hai DSLK. Mọi người giúp với
    Gửi bởi nguoirung1.6 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 05-12-2010, 04:22 AM
  5. Sử dụng DSLK đơn như thế nào?
    Gửi bởi tung_ct trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 16-10-2010, 12:32 AM

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