정체불명의 모모
[c++ ] c++로 List 구현 본문
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;
}
'프로그래밍(c++)' 카테고리의 다른 글
[스마트 포인터] Shared_ptr 알아보기(구현) (0) | 2021.07.15 |
---|---|
[ C / C++ ] malloc( ) 와 new 의 차이점 (0) | 2021.07.05 |
c++ 04 : 클래스는 객체의 설계도 [ 클래스와 객체 / 어서와c++은 처음이지] (0) | 2019.12.17 |
c++ 04 : 객체는 무엇으로 구성되는가? [ 클래스와 객체 / 어서와c++은 처음이지] (0) | 2019.12.17 |
c++ 04 : 객체 지향이란??? [ 클래스와 객체 / 어서와c++은 처음이지] (0) | 2019.12.17 |
Comments