Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
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
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  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ông cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã đượ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