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
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 <stdio.h>
#include <stdlib.h>
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;
}


Post a Comment