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