컴공일기263
게시글 주소: https://orbi.kr/00071243744
자료구조의 기본인 싱글 링크드 리스트를 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를 선물하세요.
-
[속보] 여야, 18년만에 연금개혁 최종 합의…보험료율 13%, 소득대체율 43%로 인상 5
[서울경제] [속보] 여야, 연금개혁 최종 합의…18년만의 연금개혁
-
ㅇ 유무
-
여장 ㅈ같긴하네 3
하
-
헛짓같아 보이지만 제가 이론적 타당성을 증명했음
-
제발 클릭하지 마세요. 34
♡♡클릭해주셔서 정말 감사합니다♡♡ 거기 잘생긴 or 이쁜 학생! 이왕 이렇게...
-
클-하 뜬금없지만 너희들 100의 특별함을 알고 있니? 사이타마 운동법. 우주...
-
치대 언매 화작 1
미적 생1 지1 기준으로 언매가 무조건 필수일까요? 작년에 화작 응시했고 (언매는...
-
반갑노 익 2
명
-
2027 화2생2 라스트댄스 독학서를 써볼까 그게 더 나을거라는 생각이 들었음 메인...
-
wls? 아 wix 쓰는 사람 있던데 비싼 편이에요?
-
하아
-
나도 백분위 100 찍어보는건가 흐히히 언조비카이
-
변별력 없는, 영어 절평인 정시를 싫어하는거죠.. 2017학년도 기준 연세대는...
-
센츄 교통카드 3
찍으면 센츄! 소리나고 에피 교통카트는 에피! 소리나서 부끄러워서 에취! 해서 안 들리게 함
-
[속보] 尹 탄핵 찬성 60%-반대 35% [NBS] 1
속보 [헤럴드경제=김해솔 기자] [속보] 尹 탄핵 찬성 60%-반대 35% [NBS]
-
국어인지 수학인지 모르겟는데 파랑이랑 하양이랑 섞여있고 이름이 한글자씩 띄어쓰기로...
-
Mahwa랑 Manga가 다르게 쓰이는 게 ㅈㄴ 웃김 4
영미권에서 이런 식으로 쓰이는데 한국식 웹툰은 걍 Manhwa로 퉁침 漫画를 만든...
-
11시 5분이다 0
풀고옴 ㅂㅂ
-
여러분들의 선택은?
-
저 너무 느린것같아서요..풀수만있다면 7분넘게 써도되나요?
-
근로소득 0원 1
-
저게 뭐야 ㅅㅂ 못생겼어 미적은 다 풀고 버리고 싶은 수준
-
아니 월에 2~3백이면 10
과외를 대체 몇개를 해야하는거
-
[고1, 고2, 고3 3모 대비 자료 공유]25시행 중1,고1 국어 시험지 현금 2만원 제공(선착순), 3모 대비 무료자료 배포 0
안녕하세요 나무아카데미입니다. 2026년 3월 모의고사 대비 작년 고1~3 3모...
-
종이 아까운데
-
와 한시간 이십분 순삭 ㅅㅂ
-
콘서트 안 가고 후회하면서 수능 vs 콘서트 가고 하루 시간 날렸지만 후련하게 수능 4
사실 이미 티켓 샀음 누가 뭐라해도 갈거임, 갈 때 기차에서 사탐 공부하면 하루 다...
-
작년 3덮에 OZ 입문강의만 듣고 지구 무보정 6등급 나옴 심지어 재수 시작하고...
-
얼버기 1
-
국어 독서 10, 14 틀 문학 19, 23, 27 틀 언어 37 틀 수학 28,...
-
아니 원래도 아름다우신건 알았는데 이 영상은 뭔가.. 심하게 이쁜데 캐스트 구경하다...
-
어느정도 인가요? 월세 교통 여가 다 합해서요
-
던파피방이벤트 채워야제
-
난 빈말 안 하는데 다들 내 말을 안 믿음 주량 반병이라고 했더니 안 믿음 ->...
-
가죠?
-
다 이해했다고 생각하고 문제 푸는데 2번째랑 4번째 틀렸는데 다시 지문 보니 걍...
-
사문 역할 2
수특에서 역할하고 역할행동 문제인데 ㄴ이 왜 갑의 역할인지 모르겠어요..ㅠ실제로...
-
올오카를 끝냈는데도..뭔가 부족한 기분이 들어서 다른 교재를 풀까 하는데..김승리가...
-
얼마나 스트레스가 클지 상상조차 안됨 내가 거기 다니는 학생이라고 생각해보면...
-
더프 국어 23번 관조 16
관조 맞나요? 보면서 눈물흘리고 난리치는데 한발짝 떨어져서 차분하게 보는 관조는 아니지않나유..
-
어려웠나요
-
우리의 주적 2
간부
-
이명학 풀커리 타는건 너무 시간낭비 같나요 그냥 일리 기초강의만 듣고 알아서...
-
오 센츄리온달림 4
즐겁다
-
멘토링 받는 학생들 학습욕을 고취시킬 방법을 찾으라는데 4
어케해야될지 감이 안옴 하기싫다 그러면 연고 합응이나 연고전 영상같은거 틀어줌,,?
-
바로 확인해봤는데 아직 처리중이네..
-
얼버기 10
-
3덮 화2생2 2
기숙사 살아서 주말에 집가면 풀어보려는데 범위가 어케되나요
-
김승리 kbs 0
김승리 kbs 언제 입고되나요? 20일날 한다 했는데

반가워요 새해복 많이 받으세여