Không in ra được danh sách các phần tử trong List 2 chỉ xuất hiện trong L1

c++

(Hao Tran) #1
//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.


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?