Ở hàm xóa, thầy giảng e không hiểu lắm.
#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
typedef struct _num
{
char* number;
_num *next;
}_num_node;
typedef _num_node *type_num;
typedef struct _contact
{
char *name;
type_num list_of_number;
_contact *down;
}_contact_node;
typedef _contact_node *type_contact;
void contact_intialize (type_contact &head);
void num_intialize (type_num &first);
type_contact create_contact_node();
type_num create_num_node();
type_contact add_contact_Flist(type_contact &head, type_contact p);
type_num add_num_Flist(type_num &first, type_num p);
type_contact add_contact_Llist(type_contact &head, type_contact p);
type_contact Search_Mid_Node(type_contact head);
type_contact add_contact_Mlist(type_contact &head,type_contact &mid_node,type_contact p);
type_contact create_contact_list(type_contact &head, int n);
void create_num_list(type_num &first);
void travelling_contact_list(type_contact head);
int count_contact_list(type_contact head);
type_contact searching_contact_list(type_contact head,char *name_search);
type_contact search_delete(type_contact &head , char* name_delete);
int delete_node_contact_list(type_contact &head,char* name_delete);
void delete_contact_list(type_contact &head);
int main(int argc, char *argv[])
{
type_contact head;
type_num first;
int chon;
contact_intialize(head);
num_intialize(first);
do
{
printf("\t|--MENU: Danh Ba Dien Thoai--|\n");
printf("\t| 0.Thoat. |\n");
printf("\t| 1.Nhap danh ba. |\n");
printf("\t| 2.Xuat danh ba. |\n");
printf("\t| 3.Them 1 node vao dau. |\n");
printf("\t| 4.Them 1 node vao cuoi. |\n");
printf("\t| 5.Them 1 node vao giua. |\n");
printf("\t| 6.Dem so nut |\n");
printf("\t| 7.Tim kiem theo ten. |\n");
printf("\t| 8.Xoa 1 nut. |\n");
printf("\t| 9.Xoa toan bo. |\n");
printf("\t|----------------------------|\n");
printf("\n \tNhap chon yeu cau cua ban(0->9): ");
scanf("%d",&chon);
switch(chon)
{
case 0:
{
printf("THOAT!!!\n");
break;
};
case 1: //Them
{
int n;
printf("\nNhap tong so nguoi trong danh ba cua ban: ");
scanf("%d",&n);
create_contact_list(head,n);
printf("\n");
break;
};
case 2: // Xuat
{
printf("-------------------------------------------------------------\n");
printf("|%-20s|%-38s|\n", " Ten", " So Dien Thoai");
printf("-------------------------------------------------------------\n");
travelling_contact_list(head);
printf("\n");
break;
};
case 3: // Them vao dau
{
printf("Nhap ten va so dien thoai muon them vao dau: ");
type_contact p;
p =new _contact_node;
p = create_contact_node();
add_contact_Flist(head, p);
printf("THEM THANH CONG!\n");
printf("\n");
break;
};
case 4: //Them vao cuoi
{
printf("Nhap ten va so dien thoai muon them vao cuoi: ");
type_contact p;
p = new _contact_node;
p = create_contact_node();
add_contact_Llist(head,p);
printf("THEM THANH CONG!\n");
printf("\n");
break;
};
case 5: // Them vao giua
{
printf("Nhap ten va so dien thoai muon them vao: ");
type_contact p;
type_contact mid_node = Search_Mid_Node(head);
p = new _contact_node;
p = create_contact_node();
add_contact_Mlist(head,mid_node,p);
printf("THEM THANH CONG!\n");
printf("\n");
break;
};
case 6: //Dem
{
int t;
t=count_contact_list(head);
printf("\nDanh ba cua ban co tong so lien lac la: %d !\n",t);
break;
};
case 7: // Tim kiem
{
char name_search[20];
printf("Nhap ten trong danh ba can tim: ");
fflush(stdin);
gets(name_search);
searching_contact_list(head,name_search);
printf("\n");
break;
};
case 8: // Xoa 1 nut
{
char name_delete[20];
printf("Nhap ten ban muon xoa: ");
fflush(stdin);
gets(name_delete);
int k = delete_node_contact_list(head,name_delete);
if(k==0)
printf("Khong tim thay ten can xoa!!! \n");
else{
printf("XOA THANH CONG! \n");
}
break;
};
case 9: // Xoa toan bo
{
delete_contact_list(head);
printf("XOA THANH CONG!\n");
printf("\n");
break;
};
}
}while(chon <=9 && chon >=0);
return 0;
}
// 1.Ham khoi tao danh ba, quan ly con tro dau la head
void contact_intialize (type_contact &head)
{
head = NULL;
}
void num_intialize (type_num &first)
{
first = NULL;
}
// 2.Ham tao 1 nut
type_contact create_contact_node()
{
type_contact p;
p = new _contact_node;
p->list_of_number=NULL;
if(p == NULL)
return NULL;
else
{
p->name= new char[20];
printf("\nNhap ten luu trong danh ba: ");
fflush(stdin);
gets(p->name);
create_num_list(p->list_of_number);
p->down=NULL;
return p;
}
}
type_num create_num_node()
{
type_num first;
first= new _num_node;
first->number=new char[12];
fflush(stdin);
gets(first->number);
return first;
}
//3.Ham bo sung nut p vao dau danh sach
type_contact add_contact_Flist(type_contact &head, type_contact p)
{
if(head==NULL)
{
head=p;
p->down = NULL;
}
else
{
p->down=head;
head=p;
}
}
type_num add_num_Flist(type_num &first, type_num p)
{
if(first==NULL)
{
first=p;
p->next = NULL;
}
else
{
p->next=first;
first=p;
}
}
// 4.Ham bo sung nut p vao cuoi danh sach
type_contact add_contact_Llist(type_contact &head, type_contact p)
{
type_contact q;
if(head == NULL)
head = p;
else{
q = head;
while(q->down!= NULL)
q = q->down;
q->down = p;
p->down = NULL;
}
}
// Ham tim nut giua danh ba
type_contact Search_Mid_Node(type_contact head)
{
type_contact p= head;
int i=0;
while (p!= NULL)
{
p=p->down;
i++ ;
}
type_contact q= head;
for(int j=0; j<i/2;j++)
{
q=q->down;
}
return q;
}
// 5.Ham bo sung nut p vao sau nut mid_node
type_contact add_contact_Mlist(type_contact &head,type_contact &mid_node,type_contact p)
{
type_contact a = head;
while(a!=NULL)
{ if(strcmp(a->name,p->name)==0)
return head ;
a=a->down;
}
if (mid_node!=NULL && p !=NULL)
{
p->down = mid_node->down;
mid_node->down = p;
}
}
// 6.Hàm tao danh ba dien thoai.
type_contact create_contact_list(type_contact &head, int n)
{
type_contact p;
for(int i=0; i<n; i++)
{
p=create_contact_node();
add_contact_Flist(head,p);
}
}
// Ham tao danh sach cac so dien thoai
void create_num_list(type_num &first)
{
type_num p;
int tong;
printf("Tong so dien thoai cua nguoi nay la:");
scanf("%d",&tong);
for(int i=1;i<=tong;i++)
{
printf("So thu %d la: ", i);
p=create_num_node();
add_num_Flist(first,p);
}
}
// 7. Ham duyet danh ba
void travelling_contact_list(type_contact head)
{
type_num first;
while(head!=NULL)
{
printf("|%-20s|",head->name);
first = head ->list_of_number;
head = head ->down;
while(first!=NULL)
{
printf("%-12s|",first->number);
first=first->next;
}
printf("\n");
}
}
// 8. Hàm dem so node cua danh ba
int count_contact_list(type_contact head)
{
int dem=0;
while(head!= NULL)
{
head=head->down;
dem++;
}
return dem;
}
// 9. Ham tim nut co truong ten la name_search
type_contact searching_contact_list(type_contact head,char *name_search)
{
int k = 0;
for(type_contact p = head; p != NULL; p = p->down)
{
if(strcmp(p->name,name_search) == 0)
{
printf("Dia chi nut can tim la: %d \n", p);
printf("\n");
k++;
}
}
if(k == 0)
printf("Khong tim thay!!!\n");
}
// Ham tim xoa
type_contact search_delete(type_contact &head , char* name_delete)
{
type_contact p=head;
while( p!=NULL && strcmp(p->down->name,name_delete)!=0)
p=p->down;
return p;
}
// 10. Ham xoa 1 nut co truong ten la name_delete
int delete_node_contact_list(type_contact &head,char* name_delete)
{
int k = 0;
if(strcmp(head->name,name_delete)==0){
if(head!= NULL)
{
type_contact p=head;
head=p->down;
p->down = NULL;
free(p);
}
k++;
}
else{
type_contact q = search_delete(head,name_delete);
if(q!=NULL){
if(q!=NULL)
{
_contact_node *p = q->down;
if(p->down==NULL)
q->down==NULL;
q->down = p->down;
p->down = NULL;
free(p);
}
k++;
}
}
return k;
}
// 11. Ham xoa tat ca cac nut trong danh ba
void delete_contact_list(type_contact &head)
{
type_contact p = new _contact_node;
while(head!=NULL)
{
p = head;
head = head->down;
free(p);
}
}