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