vidigummy KAU/재활운동

재활운동2 (더블 체인 리스트)

vidi 2020. 6. 8. 15:12

확실히 싱글 체인 리스트 할때 보다는 수월했다. 쓸모없는 값도 있겠지만 뭐가 중요할까.

다음은 트리(이건 순환까지 하겠다.) 그 다음은 그래프. 딱 거기까지 하고 알고리즘으로 들어간다.

#include <iostream>

using namespace std;

class Node
{
	friend class Chain;
private:
	Node* last;
	Node* next;
	int data;
public:
	Node(int val = NULL, Node* LastLink = NULL, Node* NextLink = NULL);
};

class Chain
{
private:
	Node* first;
	Node* cur;
	Node* last;
	int len;
public:
	Chain();
	void MakeNode(int value = NULL);
	void ShowAll();
	void Reverse();

};

Node::Node(int val, Node* LastLink, Node* NextLink)
{
	this->last = LastLink;
	this->next = NextLink;
	this->data = val;
}

Chain::Chain()
{
	this->first = NULL;
	this->cur = NULL;
	this->last = NULL;
	this->len = 0;
}

void Chain::MakeNode(int value)
{ 
	Node* n1 = new Node(value);
	if (this->first == NULL)
	{
		this->first = n1;
		this->cur = n1;
		this->last = n1;
		this->len++;
	}
	else
	{
		cur->next = n1;
		this->last = n1;
		last->last = cur;
		cur = n1;
		len++;
	}
}

void Chain::ShowAll()
{
	cur =  first;
	for (int i = 0; i < this->len; i++)
	{
		cout << cur->data<< " ";
		cur = cur->next;
	}
	cout << "\n";
}

void Chain::Reverse()
{
	cur = last;
	for (int i = this->len; i > 0; i--)
	{
		cout << cur->data << " ";
		cur = cur->last;
	}
}

int main()
{
	Chain* C1 = new Chain();
	C1->MakeNode(3);
	C1->MakeNode(5);
	C1->MakeNode(7);
	C1->ShowAll();
	C1->Reverse();
	return 0;

}