#include “stdio.h”
#include “conio.h”
#include “alloc.h”
//Khai bao danh sach lien ket luu tru cac so nguyen==========
typedef int ElementType;
typedef struct Node{
        ElementType Element;
        Node* Next;
//Node* Previous; (DSLK kép)
        };
typedef Node* Position;
typedef Position List;
//Chuong trinh con tao danh sach rong==========
void MakeNull_List *Header){
     (*Header) = (Node*)malloc(sizeof(Node));
     (*Header)->Next = Null;
     }
//Kiem tra danh sach rong (Rong -> 1, nguoc lai -> 0)
int Empty_List(List L){
    return (L->Next == Null);
}
//Them phan tu co noi dung X vao vi tri P trong danh sach L
void Insert_List(ElementType X, Position P, List *L){
     Position T;
     T = (Node*)malloc(sizeof(Node));
     T -> Element = X;
     T -> Next = P -> Next;
     P -> Next = T;
}
//Xoa phan tu tai vi tri P ra khoi L
void Delete_List(Position P, List *L){
     Position T;
     if (P->Next !=Null){
                 T->Next = P->Next;
                 P->Next = P->Next->Next;
                 free(T);
                 }
     else printf(“\nLoi! Danh sach rong khong the xoa!”);
}
// Tim vi tri phan tu X trong danh sach. Neu khong co thi -> EndList(L)
Position Locate(ElementType X, List L){
         Position P;
         int found = 0;
         while ((P->Next!=Null) && (found == 0)){
               if (P->Next->Element == X)
               found=1;
               else P=P->Next;
               }
         return P;
}
//Lay noi dung phan tu tai vi tri P trong danh sach
ElementType Retrieve (Position P, List L){
            if (P->Next != Null)
            return P->Next->Element;
}
Position First(List L)
{ return L;}
Position EndList(List L)
{Position P;
P=First (L);
while (P->Next!=Null)
{P=P->Next;}
return P;
}
Position
//Nhap danh sach L tu ban phim
void Read_List(List *L)
{int i, n, t;
ElementType X;
Position P;
P=First(*L);
printf(“So phan tu trong danh sach : “); flush(stdin); scanf(“%d”, &n);
for(i=1;i<=n;i++)
{
                 printf(“\nPhan tu thu %d: “, i); flush(stdin); scanf(“%d”,X);
                 Insert_List(X,EndList(*L),L);
                 }
}
//In danh sach ra man hinh
void Print_List(List L){
     Position P;
     P=First(L);
     while (P != EndList(L))
     {
           prnitf(“%d\t”,retrieve(P,L));
           P=P->Next;
           }
}