循环链表按条件分割_C++实现

循环链表按条件分割_C++实现

构造一个循环链表

存放一个含有三种字符(数字,字母,其他)字符序列

不开辟新空间

将该链表分割成三个循环链表

每个存放一种字符

“head.h”

#include<iostream>
#include<ctype.h>
#define DIGIT 1
#define ALPHA 2
#define OTHER 3
using namespace std;
class NODE
{
public:
	char atom;
	int flag;
	NODE *next;
};
class DATA
{
public:
	DATA();
	void Constructor();
	void PrePrint();
	void Process();
	void Print();
private:
	NODE *head, *head1, *head2, *head3, *p, *p1, *p2, *p3;
};
DATA::DATA()
{
	head = head1 = head2 = head3 = p = p1 = p2 = p3 = NULL;
}
void DATA::Constructor()
{
	cout << "Constructor Called !" << endl << endl;
	bool hasinput = false;
	char input;
	while (cin >> input)
	{
		if (!hasinput)
		{
			head = new NODE;
			head->atom = input;
			if (isdigit(input))
				head->flag = DIGIT;
			else if (isalpha(input))
				head->flag = ALPHA;
			else
				head->flag = OTHER;
			p = head;
			hasinput = true;
		}
		else
		{
			p->next = new NODE;
			p = p->next;
			p->atom = input;
			if (isdigit(input))
				p->flag = DIGIT;
			else if (isalpha(input))
				p->flag = ALPHA;
			else
				p->flag = OTHER;
		}
	}
	if (!hasinput)
	{
		cout << "No Data Input !" << endl << endl;
	}
	else
	{
		p->next = head;
	}
}
void DATA::PrePrint()
{
	cout << "PrePrint Called !" << endl << endl;
	if (head == NULL)
	{
		cout << "No Data !" << endl << endl;
		return;
	}
	p = head;
	cout << p->atom << endl;
	p = p->next;
	while (p != head)
	{
		cout << p->atom << endl;
		p = p->next;
	}
	cout << endl;
}
void DATA::Print()
{
	cout << "Print Called !" << endl << endl;
	if (head1 == NULL)
	{
		cout << "No Data !" << endl << endl;
	}
	else
	{
		p1 = head1;
		cout << p1->atom << endl;
		p1 = p1->next;
		while (p1 != head1)
		{
			cout << p1->atom << endl;
			p1 = p1->next;
		}
		cout << endl << endl;
	}
	if (head2 == NULL)
	{
		cout << "No Data !" << endl << endl;
	}
	else
	{
		p2 = head2;
		cout << p2->atom << endl;
		p2 = p2->next;
		while (p2 != head2)
		{
			cout << p2->atom << endl;
			p2 = p2->next;
		}
		cout << endl << endl;
	}
	if (head3 == NULL)
	{
		cout << "No Data !" << endl << endl;
	}
	else
	{
		p3 = head3;
		cout << p3->atom << endl;
		p3 = p3->next;
		while (p3 != head3)
		{
			cout << p3->atom << endl;
			p3 = p3->next;
		}
		cout << endl << endl;
	}
}
void DATA::Process()
{
	cout << "Process Called !" << endl << endl;
	if (head == NULL)
	{
		cout << "No Data !" << endl << endl;
		return;
	}
	p1 = head1;
	p2 = head2;
	p3 = head3;
	p = head;
	while (1)
	{
		if (p->flag == DIGIT)
		{
			if (p1 == NULL)
			{
				head1 = p;
				p1 = head1;
			}
			else
			{
				p1->next = p;
				p1 = p1->next;
			}
		}
		else if (p->flag == ALPHA)
		{
			if (p2 == NULL)
			{
				head2 = p;
				p2 = head2;
			}
			else
			{
				p2->next = p;
				p2 = p2->next;
			}
		}
		else
		{
			if (p3 == NULL)
			{
				head3 = p;
				p3 = head3;
			}
			else
			{
				p3->next = p;
				p3 = p3->next;
			}
		}
		p = p->next;
		if (p == head)
		{
			if (p1 != head1)
				p1->next = head1;
			if (p2 != head2)
				p2->next = head2;
			if (p3 != head3)
				p3->next = head3;
			return;
		}
	}
}

“main.cpp”

#include<iostream>
#include"head.h"
using namespace std;
int main()
{
	DATA data;
	data.Constructor();
	data.PrePrint();
	data.Process();
	data.Print();
	system("pause");
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注