Bàii DS LK Đây
Mã:
#include<iostream.h>
#include<conio.h>
typedef int kieu;
typedef struct node
{
kieu dt;
struct node *link;
}list;
list *t,*s;
void tao(list **t,list **s)
{ (*t)=(*s)=NULL; }
int kt(list *t)
{ return t==NULL; }
list *tim(int n,list *t)
{
list *p;
int d=1;
if(kt(t))cout<<"\nDanh sach rong";
else
{
while(t!=NULL&&d<n)
{
d++;
p=t;
t=t->link;
}
}
if(d!=n) return NULL;
else return p;
}
void chen(kieu x,int n,list **t,list **s)
{
list *p,*k;
p=new list;
p->dt=x;
switch (n)
{
case 0://chen dau
{
p->link=(*t);
(*t)=p;
}break;
case -1://chen cuoi
{
p->link=NULL;
if(kt(*t)) (*t)=(*s)=p;
else
{
(*s)->link=p;
(*s)=(*s)->link;
}
}break;
default://chen giua
{
k=tim(n,*t);
p->link=k->link;
k->link=p;
}
}
}
void xem(list *t)
{
while(!kt(t))
{
cout<<t->dt<<" ";
t=t->link;
}
}
void xoa(int n,list **t,list **s)
{
if(kt(*t))cout<<"\ndanh sach rong";
else
{
list *p,*q;
switch (n)
{
case 0:
{
p=(*t);
(*t)=p->link;
delete (p);
}break;
case -1:
{
while((*t)!=(*s))
{
p=*t;
(*t)=(*t)-> link;
}
p->link=NULL;
delete(*s);
(*s)=p;
}break;
default :
{
p=tim(n,*t);
if(p->link!=NULL);
{
q=p->link;
p->link=q->link;
delete(q);
}
}break;
}
}
}void nhap(list **t,list **s)
{
kieu n;
cout<<"Nhap vao ds neu =0 thoat ";cin>>n;
while(n!=0)
{
chen(n,-1,t,s);
cin>>n;
}
}
int dem(list *t)
{
list *p;
int d=0;
if(kt(t))return 0;
else
{
while(t!=NULL)
{
d++;
t=t->link;
}
}
return d;
}
void main()
{
int i;
kieu n;
char c='y';
do
{
clrscr();
tao(&t,&s);
//bai 1 chuong 2 dslk
nhap(&t,&s);
xem(t);
//bai 2 chuong 2 dslk
do
{
cout<<"\nNhap vao vi tri can chen ";cin>>i;
}while(i<0);
cout<<"\nNhap vao gia tri ";cin>>n;
chen(n,i,&t,&s);
cout<<"\ndanh sach sau khi them \n";xem(t);
//bai 3 chuong 2 dslk
do
{
cout<<"\nnhap vao vi tri can xoa ";cin>>i;
}while(i<-1);
xoa(i,&t,&s);
cout<<"\nDanh sach sau khi xoa la \n";xem(t);
//bai 4 chuong 2 dslk
cout<<"\nSo phan tu cua danh sach la ";
cout<<dem(t);
cout<<"\nCo tiep tuc ko y/n ";cin>>c;
}while(c=='y');
getch();
}
Cảm ơn cái xem thử nào hj !;))