DANH SÁCH LIÊN KẾT Viết hàm cho phép tìm vị trí xuất hiện đầu tiên của x trong danh sách. Position locate(ElementType x,List L){ int found=0; Position p=L; while(p>Next=NULLfound==0){ if(p>Next>Element==x) found=1; else p=p>Next; } return p; } Xóa tất cả ptu void removeAll(ElementType x,List L){ while(locate(x,L)>Next=NULL){ Position p=locate(x,L); deleteList(p,L); } } Viết hàm cho phép xóa phần tử ở vị trí p trong danh sách. void deleteList(Position p, List L){ Position t; t=p>Next; p>Next=p>Next>Next; free(t); } Hãy viết hàm cho biết phần tử x có tồn tại trong danh sách các số nguyên hay không int member(ElementType x,List L){ Position p=L; while(p>Next=NULL){ if(p>Next>Element==x)return 1; else p=p>Next; } return 0; } Hãy viết khai báo cho kiểu dữ liệu List với các thành phần được mô tả như hình trên để là một danh sách liên kết đơn các số nguyên struct Node { int Element; struct Node Next; }; typedef struct Node List; Hãy viết hàm nhập một tập hợp từ bàn phím, khi nhập từng giá trị, nếu 1 giá trị nhập đã có trong tập hợp thì không thêm vào để bảo đảm tập hợp có các giá trị luôn khác nhau List readSet(){ List L; makenullList(L); int n; scanf(%d\n,n); for(int i=0;iNext=NULL){ Position p=locate(x,L); deleteList(p,L); } else printf(Not found %d\n,x); } Viết hàm cho phép chèn phần tử x vào đầu danh sách. void addFirst(ElementType x,List L){ Position p,t; t=(struct Node)malloc(sizeof(struct Node)); p=L; t>Element=x;
DANH SÁCH LIÊN KẾT Viết hàm cho phép tìm vị trí xuất x danh sách Position locate(ElementType x,List L){ int found=0; Position p=L; while(p->Next!=NULL&&found==0){ if(p->Next->Element==x) found=1; else p=p->Next; } return p; } Xóa tất ptu void removeAll(ElementType x,List *L){ while(locate(x,*L)->Next!=NULL){ Position p=locate(x,*L); deleteList(p,L); } } Viết hàm cho phép xóa phần tử vị trí p danh sách void deleteList(Position p, List *L){ Position t; t=p->Next; p->Next=p->Next->Next; free(t); } Hãy viết hàm cho biết phần tử x có tồn danh sách số nguyên hay không int member(ElementType x,List L){ Position p=L; while(p->Next!=NULL){ if(p->Next->Element==x)return 1; else p=p->Next; } return 0; } Hãy viết khai báo cho kiểu liệu List với thành phần mơ tả hình để danh sách liên kết đơn số nguyên struct Node { int Element; struct Node* Next; }; typedef struct Node* List; Hãy viết hàm nhập tập hợp từ bàn phím, nhập giá trị, giá trị nhập có tập hợp khơng thêm vào để bảo đảm tập hợp có giá trị khác List readSet(){ List L; makenullList(&L); int n; scanf("%d\n",&n); for(int i=0;iNext!=NULL){ Position p=locate(x,*L); deleteList(p,L); } else printf("Not found %d\n",x); } Viết hàm cho phép chèn phần tử x vào đầu danh sách void addFirst(ElementType x,List *L){ Position p,t; t=(struct Node*)malloc(sizeof(struct Node)); p=*L; t->Element=x; t->Next=p->Next; p->Next=t; } Hãy viết hàm tìm tập hơp giao tập hợp biểu diễn danh sách L1, L2 List intersection(List L1,List L2){ List L; makenullList(&L); Position p; p=L1; while(p->Next!=NULL){ if(member(p->Next->Element,L2)) append(p->Next->Element,&L); p=p->Next; } return L; } Hãy viết hàm liệt kê tất phần tử số lẻ danh sách void printOddNumbers(List L){ Position p=L; while(p->Next!=NULL){ if(p->Next->Element%2!=0) printf("%d ",p->Next->Element); p=p->Next; } } Hãy viết hàm chuẩn hóa danh sách, tức phần tử danh sách trùng giữ lại phần tử, phần tử khác bị xóa bỏ void normalize (List *L){ Position P,Q; P=*L; while (P->Next != NULL){ Q=P->Next; while (Q->Next != NULL){ if (P->Next->Element==Q->Next->Element) deleteList (Q,L); else Q=Q->Next; } P=P->Next; } }Viết hàm cho phép xen phần tử x vào vị trí p danh sách void insertList(int x,Position p,List *pl){ Position t; t=(struct Node*)malloc(sizeof(struct Node)); t->Element=x; t->Next=p->Next; p->Next=t; } Hãy viết hàm tính trung bình cộng giá trị phần tử danh sách float getAvg(List l){ int s=0; int dem=0; Position p; p=l; while(p->Next!=NULL){ s=s+p->Next->Element; dem++; p=p->Next; } if(dem==0) return -10000.0; else return ((float)s/dem); } Viết hàm cho phép nhập danh sách từ bàn phím void append(ElementType x,List *L){ Position p,t; p=*L; t=(struct Node*)malloc(sizeof(struct Node)); while(p->Next!=NULL)p=p->Next; t->Element=x; p->Next=t; p->Next->Next=NULL; } void readList(List *L){ int n; scanf("%d\n",&n); ElementType x; makenullList(L); for(int i=0;iNext!=NULL){ if(member(p->Next->Element,L2)==0){ append(p->Next->Element,&L); } p=p->Next; } return L; } Viết hàm cho phép nối phần tử x vào danh sách void append(ElementType x,List *L){ Position p,t; p=*L; t=(struct Node*)malloc(sizeof(struct Node)); while(p->Next!=NULL)p=p->Next; t->Element=x; p->Next=t; p->Next->Next=NULL; } Hãy viết hàm chép toàn số chẵn danh sách L1 sang danh sách kết void copyEvenNumbers(List L1,List* L2){ makenullList (L2); Position P=L1; while (P->Next!=NULL){ if(P->Next->Element %2==0) append(P->Next->Element,L2); P=P->Next; } } Hãy viết hàm xếp danh sách void sort(List *L){ Position P,Q; P=*L; int t; while (P->Next!=NULL){ Q=P->Next; while (Q->Next!=NULL){ if(P->Next->Element>Q->Next->Element){ t=P->Next->Element; P->Next->Element=Q->Next->Element; Q->Next->Element=t; } Q=Q->Next; } P=P->Next; } } Viết hàm cho phép khởi tạo danh sách rỗng void makenullList(List *L){ (*L) = (struct Node*)malloc(sizeof(struct Node)); (*L)->Next=NULL; } Hãy viết hàm tìm tập hơp hợp tập hợp biểu diễn danh sách L1, L2 List unionSet(List L1,List L2){ List L3; makenullList (&L3); Position P=L1; Position Q=L2; while (P->Next!=NULL){ append(P->Next->Element,&L3); P=P->Next; } while (Q->Next!=NULL){ if(!member(Q->Next->Element,L3)){ append(Q->Next->Element,&L3); } Q=Q->Next; } return L3; } ... while(p->Next!=NULL)p=p->Next; t->Element=x; p->Next=t; p->Next->Next=NULL; } Hãy viết hàm chép toàn số chẵn danh sách L1 sang danh sách kết void copyEvenNumbers(List L1,List* L2){ makenullList (L2); Position P=L1; while... tử số lẻ danh sách void printOddNumbers(List L){ Position p=L; while(p->Next!=NULL){ if(p->Next->Element%2!=0) printf("%d ",p->Next->Element); p=p->Next; } } Hãy viết hàm chuẩn hóa danh sách, tức... phép khởi tạo danh sách rỗng void makenullList(List *L){ (*L) = (struct Node*)malloc(sizeof(struct Node)); (*L)->Next=NULL; } Hãy viết hàm tìm tập hơp hợp tập hợp biểu diễn danh sách L1, L2 List