컴공일기263
자료구조의 기본인 싱글 링크드 리스트를 C++ 버전으로 간단히 구현한 예제입니다.
OOP답게 노드, 링크드 리스트, 이터레이터의 클래스가 정의되고
각각의 객체가 가져야 하는 기능을 구현한 것이지요.
사실, 핵심에 초점을 맞추어 구현했기 때문에
상용화를 시키기엔 “매우 매우” 무리가 있습니다.
당장, 리스트의 중간에 삽입하는 로직도 없고
무엇보다 더미헤드를 가지지 않은 상황이라 비효율적이고
딥 카피 기반의 복사 생성도 지원하지 않지요.
또 충격적인 건, 이미 STL에서 forward_list를 지원하고 있습니다.
이 코드보다 훨씬 더 정교하고, 신뢰성있고, 효율적인 라이브러리를 이미 C++에서는 지원하고 있죠.
즉, C++에서 구현해 놓은 좋은 라이브러리를 가져다 쓰면 될 일입니다.
그러면 왜 이런 코드를 짠 걸까.
간단합니다. STL은 저와 같은 “사용자” 입장에서 구현과 상세가 감추어졌습니다.
따라서, 제 입장에선 STL 리스트의 전반적 구조를 모릅니다. 그런데 말입니다.
“잘 가져다 쓴다는 건”, 내부적인 상황을 어느정도는 알 때 가능한 일입니다.
이 라이브러리가 어떤 구조를 갖고 있는지를 아예 모르는 상태라면, 자칫 이 라이브러리 구조에서
절대 하면 안 될 짓거리들을 하기 마련이죠. 라이브러리를 잘 쓰려면, 우선 하지 말아야 할 걸 알아야 하고
이 말은 결국… 어느 정도의 구조는 알고 있어야 된다는 걸 의미하죠.
따라서, 완벽하고 확실하게는 아니어도 이런 방식으로 흉내내면서 전체적인 구조를 파악할 필요가 있습니다.
OOP에서는 구조가 너무나도 중요한 핵심이니까요. 구조에 따라서, 해야 할 짓과 안 해야 할 짓이 나뉩니다.
안해야 할 짓을 해야 할 짓으로 착각하고 이용한다면?
야근 시간이 길어지겠죠?
#include <iostream>
using namespace std;
class Node
{
public:
explicit Node(int value) : data(value), next(nullptr) {};
//getter
Node* getNext() const
{
return next;
}
int& getData()
{
return data;
}
//setter
void setNext(Node* nextNode)
{
next = nextNode;
}
void setData(int value)
{
data = value;
}
private:
int data;
Node* next = nullptr;
};
class Linked_List
{
public:
Linked_List() : head(nullptr) {};
~Linked_List()
{
Node* tmp = head;
while(tmp != nullptr)
{
Node* pDelete = tmp;
cout << "delete " << pDelete->getData() << endl;
tmp = tmp->getNext();
delete pDelete;
}
}
void insertAtHead(int value)
{
Node* newNode = new Node(value);
if(head == nullptr)
{
head = newNode;
}
else
{
newNode->setNext(head);
head = newNode;
}
}
void remove(int value)
{
//헤드 노드를 삭제하는 경우
if(head->getData() == value)
{
Node* pDelete = head;
head = pDelete->getNext();
delete pDelete;
return;
}
//헤드가 아닌 노드를 삭제하는 경우
Node* pDelete = head->getNext();
Node* pPrevious = head;
while(pDelete->getData() != value)
{
pDelete = pDelete->getNext();
pPrevious = pPrevious->getNext();
}
pPrevious->setNext(pDelete->getNext());
delete pDelete;
}
void getList()
{
Node* tmp = head;
while(tmp != nullptr)
{
cout << tmp->getData() << " ";
tmp = tmp->getNext();
}
cout << endl;
}
class Iterator
{
public:
explicit Iterator(Node* Node) : current(Node) {}
int& operator*() const
{
return current->getData();
}
Iterator& operator++()
{
if(current) current = current->getNext();
return *this;
}
bool operator!=(const Iterator& other)
{
return current != other.current;
}
private:
Node* current;
};
Iterator begin()
{
return Iterator(head);
}
Iterator end()
{
return Iterator(nullptr);
}
private:
Node* head;
};
int main()
{
Linked_List list;
list.insertAtHead(1);
list.insertAtHead(2);
list.insertAtHead(3);
list.insertAtHead(4);
Linked_List::Iterator it = list.begin();
for(auto it = list.begin(); it != list.end(); ++it)
{
*it *= 3;
}
list.getList();
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
반가워요 새해복 많이 받으세여좋아요 0 답글 달기 신고
-
관악으로 가자
-
기하가 개꿀과목인 이유 10
그림 개발로 그려도 딸깍 풀림
-
나정도면 장발 아닐까 12
아님.
-
근데 실력 상승의 여지는 많아보인다는 것임그래서 조음
-
제목 그대로인데요.. 제가쓴 학과가 빵났다고하는데 추합권 끝자락이거든요... 빵나면...
-
바로 식초임 매일매일 저녁에 한번씩 세안하고 물 받아서 식초 조금 풀어서 얼굴...
-
오류 뭐라고 고쳤는지 궁금해서 올해수분감 봤는데 ㅋㅋㅋㅋㅋ 내릴생각없나보네
-
그래도 요 며칠 16
기하 폐관수련 했더니 다시 폼 오른 것 같아서 행복해요 이걸 어따 써먹지 근데
-
어그로 끌어서 죄송합니다 이정도면 발뻗잠 가능할까요
-
강사 외모대결 4
강사 외모대결 투표 올리면 벤인가요??
-
문학 레전드모음 5
미궁의문 우포늪왁새 골목안 잊음을논함 뭐 더있나
-
고전소설 읽는게 4~5분 걸리는데 전체 시간을 6분만 주시던데 어케 품
-
하.. T1 연락주세요 돈없으면 나 써야지 뭐
-
적어주시면 됩니다~
-
가격이나 방법같은 정보 좀 주십쇼ㅠㅠ
-
사냥하러? 엽총필요하나
-
ㄹㅇ 개무섭다 다 까만 옷 입고 길거리에서 담배피는데 눈 마주치면 나 때릴 거 같음
-
중앙대=이재명임 1
서울대 윤석녈 고려대 이면박 서강대 바끈혜 경희대 문줴인 Let’s go
-
그래그래나는당당하다
-
[짧은 칼럼] 수능 문학의 일상언어적 접근 #1 - 2022 수능 고전수필 23번 19
수능 문학은 비문학화되었으며, 일상언어적으로 출제됩니다. 종종 관련 기출문제를...
-
새터 OT 개총 MT 이런것들..?
-
정시 고민하고 있는데 수능 때 언매 확통 물1 사문or생1 이렇게 해도 지원...
-
내일 보내야지..
-
싫어하면 댓글 ㄱㄱ
-
설마 정리처럼 설명한 거임? 아니면 그 문제에서만 된다고 한 거?
-
사탐런 2
사탐런하고 개학전까지는 국영수만 하려는데 생윤 사문 3월부터 해도 되겠죠??
-
지금 수학 하루에 6~7시간 정도 하는데 뉴분감에 시냅스까지만 잘 소화해도 양...
-
어문에서 경영대로 전과성공 햇으면 한 해 열심히 살은거임? 2
열김히 살앗다고 말할수잇냐?
-
패무무무무 특히 국어는 1년 공부했는데 4 뜸
-
미적 선택자입니다 현역인데 이번 겨울방학부터 개념시작해서 시발점부터 이제 적분 하고...
-
입시해본사람은 꽤 좋은 학교로 생각하고 제대로 안해본 사람은 그냥 적당한 학교로...
-
⭐️ 연세대학교 중앙새내기맞이단에서 25학번 아기독수리들을 환영합니다 ⭐️ 0
⭐️ 연세대학교 25학번 아기독수리들 주목 ⭐️ 안녕하세요! 연세대학교...
-
내 흥미가 유지되는건 본편뿐이었어...
-
호텔경영학과랑 어문계열쪽 과팅 들어오면 닥치고 잡으셈 예쁘신 분들 한 명은 있었음
-
기본개념 충분히 공부했고 이제 실전개념 공부하려고 하는데 뉴런 제외하고 메가 내에서...
-
ㅇㄷㄴㅂㅌ
-
작년 69수능 백분위 미적 100 99 98였는데 수능끝나고 공부 안 했어서.....
-
과도한 강평 드립은 차단합니다
-
옛날옛적엔... 8
자이스토리랑 무료 실모만 풀고 들어가도 수학 1 뜨는게 가능했었다네요
-
이번에 학교 옮기시는 분들 궁금합니다 한학기만? 아니면 1학년(RE) 끝내고 내년?
-
ㅎㅎ
-
업무강도 갈 때마다 다른데 대부분 빡셈 보통 2시간마다 10분씩 쉬고 밥은 공짜에요
-
예비 400이면 붙나요?? 작년에는 800번대까지 돌아서 작년기준 붙는게 맞는데,...
-
수학 효과 조음
-
. . 어그로 죄송합니다ㅠㅠ 확통 인강을 들어야하는데 어떤분을 들어야할지 모르겠어요...
-
국어뭘풀든한개씩틀리는데 21
걍 기출싹돌리고 유기하고 수학해도대나
-
모하냐 2
심심하다
-
궁상맞게 혼자 집에 있어야겠다