#include #define MaxLength 20 typedef int ElementType; typedef int Position; typedef struct { ElementType Elements[MaxLength]; Position Last; } List; void MakeNullList(List *L) { L->Last = 0; }; int EmptyList(List L) { return L.Last == 0; }; Position EndList(List L) { return L.Last + 1; } Position First(List L) { return 1; } Position Next(Position P, List L) { return P + 1; } ElementType Retrieve(Position P, List L) { return L.Elements[P-1]; } void InsertList(ElementType X, Position P, List *L) { if(L->Last == MaxLength) printf("Mang day"); else if((P<1) || (P>L->Last+1)) printf("Vi tri khong hop le"); else { Position Q; for(Q = (L->Last - 1)+1; Q > P-1; Q--) { L->Elements[Q] = L->Elements[Q-1]; }; L->Elements[P-1] = X; L->Last++; } }; void DeleteList(Position P, List *L) { if((P<1) || (P>L->Last)) printf("Vi tri khong hop le"); else if(EmptyList(*L)) printf("ds rong"); else { Position Q; for(Q = P-1; QLast-1; Q++) { L->Elements[Q] = L->Elements[Q+1]; }; L->Last--; } }; Position Locate(ElementType X, List L) { Position P; int Found = 0; P = First(L); while(P != EndList(L) && Found == 0) { if(X == Retrieve(P, L)) Found = 1; else P = Next(P, L); }; return P; } void ReadList(List *L) { int i,n; ElementType X; MakeNullList(&(*L)); printf("Nhap vao so phan tu: "); scanf("%d", &n); for(i = 1; i<=n; i++) { printf("Nhap vao phan tu thu %d: ", i); scanf("%d", &X); InsertList(X, i, &(*L)); }; } void PrintList(List L) { for(int i = 1; i<=L.Last; i++) { printf("%d", Retrieve(i, L)); }; printf("\n"); } int main() { List L; ElementType X; Position P; ReadList(&L); printf("Ds da nhap la: "); PrintList(L); printf("Nhap vao phan tu muon xen: "); scanf("%d", &X); printf("Nhap vao vi tri muon xen: "); scanf("%d", &P); InsertList(X, P, &L); printf("Ds da nhap la: "); PrintList(L); printf("Nhap vao phan tu muon xoa: "); scanf("%d", &X); P = Locate(X, L); DeleteList(P, &L); printf("Ds da nhap la: "); PrintList(L); }