#include<stdio.h>
#include<conio.h>
#include<alloc.h>
typedef struct contro{
int so;
struct contro *next;
}contro;
contro *ptmoi(int k){
contro *p;
p=(contro *)malloc (sizeof(contro));
p->so=k;
return p;
}
contro *cuoids(contro *ds){
contro *p;
p=ds;
while(p->next)
p=p->next;
return p;
}
void xoasau(contro *p){
if(p->next)
p->next=(p->next)->next;
else
printf("\n khong xoa duoc");
}
void xoa1(contro *p){
if(p->next)
p->next=(p->next)->next;
}
contro *taods(){
contro *p,*ds,*cuoi;
int i,k,n;
ds=NULL;
printf("\n moi nhap vao so phan tu cua day n= ");
scanf("%d",&n);
for(i=0;i<n;)
{
printf("\n nhap vao gia tri can dua vao danh sach k= ");
scanf("%d",&k);
if(k>cuoids(ds)->so)
{
p=ptmoi(k);
p->next=NULL;
if(ds)
cuoids(ds)->next=p;
else ds=p;
i++;
}
else
{
printf("\n moi nhap gia tri khac ");
xoa1(p);
}
}
return ds;
}
void inds(contro *ds){
contro *p;
for(p=ds;p;p=p->next)
printf("%5d",p->so);
printf("\n");
}
void chentang(contro *ds,int x){
contro *p;
for(p=ds;p->next;p=p->next)
{
if(x==(p->next)->so)
{
printf("\n so can chen da co trong day");
xoasau(p);
return;
}
else if(x<(p->next)->so)
return;
else
{
p->so=(p->next)->so;
(p->next)->so=x;
}
}
}
void xoa(contro *ds,int k){
contro *p;
for(p=ds;p->next;)
{
if((p->next)->so==k)
xoasau(p);
else
p=p->next;
}
}
void main(){
contro *ds,*p;
int x;
ds=taods();
inds(ds);
printf("\n nhap vao gia tri can chen x= ");
scanf("%d",&x);
p=ptmoi(x);
p->next=ds;
ds=p;
chentang(ds,x);
printf("\n danh sach sau khi chen %d vao la:\n",x);
inds(ds);
printf("\n nhap vao gia tri can xoa x= ");
scanf("%d",&x);
printf("\n danh sach sau khi xoa %d la:\n",x);
xoa(ds,x);
if(ds->so==x)
ds=ds->next;
inds(ds);
getch();
}