//Khai bao thu vien:
#include<iostream>
using namespace std;
//Khai bao cau truc du lieu:
struct Node
{
int nData;
Node *pNext;
};
struct List
{
Node *pHeal;
Node *pTail;
List()
{
pHeal = pTail = NULL;
}
};
//Khai bao tien ham:
Node *createNode(int nX);
int getSize(List L);
Node *doAdvane(List L, int nVT);
//Cau 2a:
void addTail(List &L, int nX);
//Cau 2b:
void deHeal(List &L);
//Cau 2c:
void inputNodeChan(List &L, int nN);
//Cau 2d:
void output(List L);
//Cau 2e:
void deHeal_KNode(List &L, int nK);
//Cau 2f:
Node *doAdvane(List L, int nVT);
Node *doAdvane_X(List L, int nX);
bool ktraSCP(int nX);
int soChinhPhuong(List L);
void deSCP(List &L , int nVT);
void deSCP1(List &L);
//Cau 2g:
int timTuanTu(List L, int nKey);
//Cau 2h:
void interChangeSort(List &L);
//Cau 3a:
void printL1_L2(List L1, List L2);
//Cau 3b:
Node *findX(List L, int fX);
void printL1NotLikeL2(List L1, List L2);
//Chuong trinh chinh:
int main()
{
//Khai bao ,khoi tao cho danh sach L:
//List L;
//int nN = 0;
//int nVT = 0;
//Thuc thi ham cau 2c:
/*cout <<"Nhap so phan tu: ";
cin >> nN;
inputNodeChan(L,nN);
*/
//Thuc thi ham cau 2d:
/*output(L);*/
//Thuc thi ham cau 2e:
/*deHeal_KNode(L,5);
output(L);*/
//Thuc thi ham cau 2f:
/*nVT = timTuanTu(L,soChinhPhuong(L));
//Cach 1:
deSCP(L,nVT);
//Cach 2:
deSCP1(L);
output(L);*/
//Thuc thi ham cau 2g:
/*cout << timTuanTu(L,soChinhPhuong(L));*/
//Thuc thi ham cau 2h:
/*interChangeSort(L);
cout<<"============XUAT LAI MANG SAU KHI SAP XEP============\n";
output(L);*/
//Thuc thi ham cau 3a:
List L1;
int nN1 ;
cout << "Nhap so phan tu nN1: ";
cin >> nN1;
inputNodeChan(L1,nN1);
output(L1);
List L2;
int nN2 ;
cout << "Nhap so phan tu nN1: ";
cin >> nN2;
inputNodeChan(L2,nN2);
output(L2);
//printL1_L2(L1, L2);
printL1NotLikeL2(L1, L2);
system("pause");
return 0;
}
//Dinh nghia ham:
Node *createNode(int nX)
{
Node *p = new Node;
if (p == NULL)
{
exit(1);
}
p->nData = nX;
p->pNext = NULL;
return p;
}
void addTail(List &L, int nX)
{
Node *pNew = createNode(nX);
if (L.pHeal == NULL)
{
L.pHeal = L.pTail = pNew;
}
else
{
L.pTail ->pNext = pNew;
L.pTail = pNew;
}
}
void deHeal(List &L)
{
Node *p ;
if (L.pHeal == NULL)
{
return;
}
else
{
p = L.pHeal;
L.pHeal = p ->pNext;
delete p;
}
}
void inputNodeChan(List &L, int nN)
{
int nX ;
for (int i = 1; i <= nN; i++)
{
cout <<"Nhap pha tu: ";
cin >> nX;
while (nX % 2 != 0)
{
cout <<"Nhap lai, yeu cau nhap so chan: ";
cin >> nX;
}
if (nX % 2 == 0)
{
addTail(L,nX);
}
}
}
void output(List L)
{
cout <<"===========XUAT DANH SACH===========\n";
for(Node *p = L.pHeal ; p != NULL ; p = p->pNext)
{
cout <<" "<<p->nData;
}
cout << endl;
}
int getSize(List L)
{
int nSize = 0;
for(Node *p= L.pHeal ; p != NULL ; p = p->pNext)
{
nSize++;
}
return nSize;
}
void deHeal_KNode(List &L, int nK)
{
while (nK > 0 && nK <= getSize(L))
{
deHeal(L);
nK--;
}
}
Node *doAdvane_X(List L, int nX)
{
Node *p = L.pHeal;
if (p != NULL && p ->nData != nX)
{
p = p->pNext;
}
return p;
}
bool ktraSCP(int nX)
{
bool bKiemtra = false;
if (nX < 4)
{
bKiemtra = false;
}
else
{
for (int i = 2; i < nX; i++)
{
if (i * i == nX)
{
bKiemtra = true;
}
}
}
return bKiemtra;
}
int soChinhPhuong(List L)
{
int nSCP ;
for(Node *p = L.pHeal ; p != NULL ; p = p->pNext)
{
if (ktraSCP(p->nData) == true)
{
nSCP = p->nData;
break;
}
}
return nSCP;
}
void deSCP(List &L , int nVT)
{
Node *p;
Node *q;
if (L.pHeal == NULL)
{
return ;
}
else
{
if (nVT == 1)
{
p = L.pHeal;
L.pHeal = p->pNext;
}
else
{
q = doAdvane(L,nVT - 1);
p = q->pNext;
q->pNext = p->pNext;
if ( p == L.pTail)
{
L.pTail = q;
}
}
delete p;
}
}
void deSCP1(List &L)
{
int nSCP;
Node *p;
Node *q;
for (Node *i = L.pHeal; i != NULL ; i = i->pNext)
{
if (ktraSCP(i->nData) == true)
{
nSCP = timTuanTu(L,i->nData);
break;
}
}
if (L.pHeal == NULL)
{
return;
}
else
{
if (nSCP == 1)
{
p = L.pHeal;
L.pHeal = p->pNext;
}
else
{
q = doAdvane(L,nSCP - 1);
p = q->pNext;
if (q!=NULL)
{
q->pNext = p->pNext;
if (p == L.pTail)
{
L.pTail = q;
}
}
}
delete p;
}
}
Node *doAdvane(List L, int nVT)
{
if (nVT < 1 && nVT > getSize(L))
{
return NULL;
}
Node *p = L.pHeal;
int i = 1;
while (nVT > i && p != NULL)
{
p = p->pNext;
i++;
}
return p;
}
int timTuanTu(List L, int nKey)
{
int nVT = 1;
for(Node *p = L.pHeal ; p != NULL ; p = p->pNext)
{
if (p->nData == nKey)
{
return nVT;
}
nVT++;
}
return -1;
}
void interChangeSort(List &L)
{
for(Node *p = L.pHeal; p != NULL ; p = p->pNext)
{
for(Node *q = L.pHeal ; q != NULL && q->pNext != NULL ; q = q->pNext)
{
if (p->nData > q->nData)
{
swap(p->nData,q->nData);
}
}
}
}
void printL1_L2(List L1, List L2)
{
cout <<"============L1 LOVE L2============\n";
for (Node *p = L1.pHeal ; p != NULL ; p = p->pNext)
{
for(Node *q = L2.pHeal ; q != NULL ; q = q->pNext)
{
if (p->nData == q ->nData)
{
cout <<" "<<p->nData;
}
}
}
cout << endl;
}
Node *findX(List L, int fX)
{
for(Node *p = L.pHeal; p != NULL ;p = p->pNext )
{
if (p->nData == fX)
{
return p;
}
}
return NULL;
}
void printL1NotLikeL2(List L1, List L2)
{
cout <<"============L1 NOT LIKE L2============\n";
for(Node *p = L1.pHeal ; p != NULL ; p = p->pNext)
{
if (timTuanTu(L2,p->nData) == -1)
{
cout <<" "<< p->nData;
}
}
cout << endl;
}
Đề Bài: Hiện tại mình đang thắc mắc câu 3b với đề bài: In ra danh sach các phần tử chỉ xuất hiện trong L1 . Mình dò tìm theo kiểu tìm tuần tự giá trị phần tử của L1 trong List 2 nhưng không xuất ra được, mong mọi người chỉ giáo.