Header Ads

Xóa một phần tử trong danh sách liên kết(P2)

Xóa một phần tử trong danh sách liên kết(P2)

 

Nhập xuất DS liên kết như ta đã biết ở  (P1) giờ ta vào phần 2, xóa một phần tử.

I Xóa Một phần tử gồm hai trường hợp.
1.1 Nút cần xóa là nút đầu tiên

1.2 Nút cần xóa không phải la nút đầu
Code:
int Xoa(int giatri){
     nut *p, *q;
     
     if(dau == NULL) return 0;
     if(dau->data == giatri){
        p = dau;
        dau = dau->next;
        free(p);          
     }
     else{
           p = dau;
           q = dau->next;
           while((p != NULL)&&(p->data != giatri)){
                  q=p;
                  p=p->next;           
           }
           if(p != NULL){
            q->next = p->next;
            free(p);           
           }  
               
     }
}

Code Cả Bài:

#include &ltstdio.h&gt
#include &ltstdlib.h&gt
typedef struct SV{
        int data;
        struct SV* next;        
} nut;
nut* dau,* cuoi;
void ThemDau(int giatri){
     nut *p;
     p=(nut* )malloc(sizeof(nut)); 
     p->data=giatri;
     p->next=dau;
     dau=p;   
}
void ThemCuoi(int giatri)
{
    nut *p = (nut *)malloc(sizeof(nut)); //1. Khai báo và c?p phát vùng nh?
    p->next = NULL;  
    if (dau == NULL)                     //3. G?n p vào cu?i danh sách
        dau = p;
    else
        cuoi->next = p;
    cuoi = p;                            //4. C?p nh?t con tr? cuoi
}

void HienThi(){
     nut *p;
     p=dau;
     while(p != NULL){
          printf(" %d ",p->data);
          p=p->next;                               
     }     
}
int Xoa(int giatri){
     nut *p, *q;
     
     if(dau == NULL) return 0;
     if(dau->data == giatri){
        p = dau;
        dau = dau->next;
        free(p);          
     }
     else{
           p = dau;
           q = dau->next;
           while((p != NULL)&&(p->data != giatri)){
                  q=p;
                  p=p->next;           
           }
           if(p != NULL){
            q->next = p->next;
            free(p);           
           }  
           
           
     }
}
int main()
{
    int n,i,s;
    printf("Nhap vao tong so: ");
    scanf("%d",&n);
    for(i=0 ; i < n ; i++){
         printf("Nhap vao so %d: ",i+1);
         scanf("%d",&s);    
         ThemCuoi(s);        
    }
    HienThi();
    printf("\n Nhap vao so can xoa, trong day vua nhap: ");
    scanf("%d",&i);
    Xoa(i);
    HienThi();
  
  system("PAUSE"); 
  return 0;
}

No comments