typedef struct{ //cấu trúc danh sáchs
int Data[MAX];
int Size;
}List;
void makeNullList(List *L){ //tạo danh sách rỗng
L->Size = 0;
}
bool emptyList(List L){ //kiểm tra danh sách rỗng
return L.Size == 0;
}
void insertList(int x, List *L){ //thêm x vào trong danh sách
L->Data[L->Size] = x;
L->Size++;
}
int elementAt(List *L){ //lấy từ phần tử đầu tiên trong danh sách
int temp = L->Data[0];
for (int i = 0; i < L->Size; i++){
L->Data[i] = L->Data[i+1];
}
L->Size--;
return temp;
}
bool memberList(int x, List L){ //kiểm tra x có trong danh sách không
for (int i = 0; i < L.Size; i++){
if(L.Data[i] == x)
return true;
}
return false;
}
//kiểm tra có phần tử nào trong L1 có trong L2 không
bool memberDoubleList(List L1,List L2){
for (int i = 0; i < L1.Size; i++){
if(memberList(L1.Data[i], L2))
return true;
}
return false;
}
void printPath(List L){ // in danh sách ra
for (int i = 0; i < L.Size; i++)
printf("%d ",L.Data[i]);
}
void copyList(List *L1, List *L2){ // copy danh sách L1 qua L2
makeNullList(L2);
for (int i = 0; i < L1->Size; i++){
int x = L1->Data[i];
insertList(x,L2);
}
}
int getPos(List L,int x){ //trả về vị trí của phần tử x trong danh sách
for (int i = 0; i < L.Size; i++){
if(L.Data[i] == x)
return i;
}
return -1; // nếu không có trả về -1
}
int maxList(List L){ //trả về phần tử lớn nhất trong danh sách
int max = L.Data[0];
for(int i = 1; i < L.Size; i++){
if(max < L.Data[i])
max = L.Data[i];
}
return max;
}
int minList(List L){ // trả về phần tử nhỏ nhất trong danh sách
int min = L.Data[0];
for(int i = 1; i < L.Size; i++){
if(min > L.Data[i])
min = L.Data[i];
}
return min;
}
int sumList(List L){ //tính tổng các phần tử trong danh sách
int sum = 0;
for(int i = 0; i < L.Size; i++){
sum += L.Data[i];
}
return sum;
}
typedef struct{ //cấu trúc của ngăn xếp
int Data[MAX];
int Size;
}Stack;
void makeNullStack(Stack *S){ //tạo ngăn xếp rỗng
S->Size = 0;
}
bool emptyStack(Stack S){ //kiểm tra ngăn xếp rỗng không
return S.Size == 0;
}
void pushStack(Stack *S, int x){ //thêm x vào ngăn xếp
S->Data[S->Size] = x;
S->Size++;
}
int pullStack(Stack *S){ //lấy x ra từ ngăn xếp
int temp = S->Data[S->Size - 1];
S->Size--;
return temp;
}
bool memberStack(int x, Stack S){ //kiểm tra x có trong ngăn xếp không
for (int i = 0; i < S.Size; i++){
if(S.Data[i] == x)
return true;
}
return false;
}