정체불명의 모모

[c++ ] c++로 List 구현 본문

프로그래밍(c++)

[c++ ] c++로 List 구현

정체불명의 모모 2020. 9. 6. 22:56

c++ 로 List구현 하는 방법입니다. 

블로그 참고 하였고, 면접 질문이 나와 공부 하였습니다.

List.h

#pragma once

class List
{
private :
	class Node
	{
	public :
		int data;
		Node* nextNode;
	};

	void valid(int count);  // 예외처리를 하기 위한 함수 (사용자 함수 x)
	
	int count;				// 리스트의 크기를 저장할 변수
	Node* Head = new Node;	// Head 노드

public :
	List();	// 생성자 
	/*
			List 할 수 목록
	*/
	int get(int index);		// 해당 index 데이터 출력
	void add(int data);		// 맨 앞에 새로운 노드 추가
	void add(int index, int data);	// 해당 index에 새로운 노드 추가
	int size();						// List의 길이를 리턴함
	void set(int index, int data);	// 데이터 값 변경
	void remove(int index);			// 해당 index 삭제
	bool isEmpty();					// 객체가 비어있는지 확인

};

 

List.cpp

#include <iostream>
#include "List.h"

using namespace std;

List::List()
{	
	Head->nextNode = NULL;
	List::count = 0;
}

int List::get(int index)
{
	try
	{
		valid(index); 
	}
	catch (const char* msg)
	{
		cout << msg << endl;
		return -1;
	}

	Node* temp = Head;

	for (int i = 0; i <= index; i++)
	{
		temp = temp->nextNode;
	}
	return temp->data;
}

void List::valid(int count)
{
	if (count > List::count)
	{
		throw "Error : 유효하지 않은 index 입니다.";
	}
}

int List::size()
{
	return List::count;
}

void List::add(int data)
{
	Node* NewNode = new Node;
	NewNode->data = data;
	NewNode->nextNode = NULL;

	if (Head->nextNode == NULL)
	{
		Head->nextNode = NewNode;
	}
	else
	{
		Node* temp = Head;
		while (temp->nextNode != NULL)
		{
			temp = temp->nextNode;
		}
		temp->nextNode = NewNode;
	}
	List::count++;
}

void List::add(int index, int data)
{
	try
	{
		valid(index);
	}
	catch (const char* msg)
	{
		cout << msg << endl;
		return;
	}

	Node* NewNode = new Node;
	NewNode->data = data;
	NewNode->nextNode = NULL;

	if (Head->nextNode == NULL)
	{
		Head->nextNode = NewNode;
	}
	else
	{
		Node* temp = Head;
		for (int i = 0; i < count; i++)
		{
			temp = temp->nextNode;
		}
		NewNode->nextNode = temp->nextNode;
		temp->nextNode = NewNode;
	}
	List::count++;
}

void List::set(int index, int data)
{
	try
	{
		valid(index);
	}
	catch (const char* msg)
	{
		cout << msg << endl;
		return;
	}

	Node* temp = Head;
	for (int i = 0; i <= index; i++)
	{
		temp = temp->nextNode;
	}
	temp->data = data;
}

void List::remove(int index)
{
	try
	{
		valid(index);
	}
	catch (const char* msg)
	{
		cout << msg << endl;
		return;
	}

	Node* temp = Head;
	Node* remove = Head;

	for (int i = 0; i < index; i++)
	{
		temp = temp->nextNode;
		remove = remove->nextNode;
	}
	remove = remove->nextNode;

	temp->nextNode = remove->nextNode;
	remove->nextNode = NULL;
	delete remove;
	List::count--;
}

bool List::isEmpty()
{
	Node* head = Head;
	if (head->nextNode == NULL)
	{
		return true;
	}
	else
	{
		return false;
	}
}

 

main.cpp

#include "List.h"
#include <iostream>

using namespace std;

int main()
{
	List test;

	test.add(10);
	test.add(20);
	test.add(30);
	test.add(3, 40);
	test.remove(0);
	test.set(0, 100);

	for (int i = 0; i < test.size(); i++)
	{
		cout << "data : " << test.get(i) << endl;
	}

	cout << "size : " << test.size() << endl;
	cout << "isEmpty : " << test.isEmpty() << endl;

	test.remove(10);
	return 0;
}

 

Comments