컴공일기263
게시글 주소: https://ebsi.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를 선물하세요.
-
아 기대된다 2
이원준 독서 박광일 문학 국어황이 될테야
-
존나비싸네 어안해
-
정시로 경희대나 외대 진학하게 될 것 같습니다. 오르비에 워낙 문과는 서성한 밑으로...
-
난 이번생은 모쏠이라… 응…
-
이미 나이 전적대 출신지역 다깠고 대치동 대형 논술학원에서 내걸로 홍보하고 있는데...
-
https://orbi.kr/00071243566 안 본 사람들은 보고 와 나처럼...
-
이제 제이홉 콘서트 티켓팅 성공이랑 남친 사귀기만 성공하면 해피 2025년의 시작은 쌉가능일텐데
-
요즘 인스타가 자꾸 수험생들 간절함 이용해서 불안 심리에 불 붙이는 장사치들을...
-
문학에서 시간을 더 단축시킬 수 있을 거 같아서 훈련도감 들어보고 싶네요
-
현역 3합6 의대 10
벌레인가요? ㅠㅠㅠㅡ열등감 땜에 집중이안대여..말하기도 ㅉ팔리고 물론 맞춘다는...
-
진짜 모름
-
중딩때 일진들이 페북에 누구누구 심사원가는데 서신써달라 드립치는거 ㄹㅇ 개한심해보였음
-
‘모로 가던 서울만 가면 된다’ 결국 들어가면 조금 불합리 하게 느껴질수도 있겠지만...
-
남자가 좀 많음 ㅇㅇ
-
성비메타인가 2
어쩌다보니 열어버렸네 암튼 올해엔 다들 연애합시다
-
가능범위만 좀 넓히면 된다
-
물리에서 생명 20
삼수를 고려중인데... 물리 버리고 생명 하는게 어떨까요? 물리 3등급 나왔고...
-
공룡 TMI 10
사실 테리지노사우루스의 발톱은 매체에서 묘사된 바와는 달리 강도가 그렇게 높지...
-
나진짜 정신병올것같다고
-
나 화날라그래
-
신난다
-
이거 알고리즘 초기화기능 없음?
-
계정탈퇴하고 1년만....
-
나도 남친 제발.. 나름 자기관리 체크리스트 23개 중 15개 클리어하며 노력...
-
예비 고2인데 언매 유대종이랑 김승리중 누구들을까요? 내신 댑ㄱ용으로 들을거에요
-
미적분 못함 현역때는 미적분 항상 2-3개씩 틀렧고 수학적센스 그런거 없음 공통은...
-
왜 나는 아직도 오르비에 대해 모르는 게 이리도 많은가
-
요새 문만이 잘 안됨 16
새로 나올 신규 지인선 N제에 모든 것을 쏟아 부은 듯...
-
컴공일기263 0
자료구조의 기본인 싱글 링크드 리스트를 C++ 버전으로 간단히 구현한 예제입니다....
-
옯붕이들 굿밤 1
좋은꿈꿔!
-
조교하고싶다 2
내일결과나온다네 이거떨어지면뭐하지
-
설윤도 10년뒤엔 저렇게 늙는다
-
지1은 이미 골랐고 생1을 처음 시작하자니 내가 1년 만에 고득점 할 자신이 없음...
-
3모 96 99 2 100 99 5모 98 99 1 100 99 6모 98 99 2...
-
학교 내신 특 4
국어 수학 영어 ——> 실력이 등급과 비례하는 것 맞음( 일컷 100점인 ㅈㅈ반고가...
-
순공시간 12
예비 고2는 순공시간 얼마나 나와야 유의미하나여? ㅜ 주변보니까 다 너무 열심히...
-
새벽인데 똥글이 업네 18
글좀써얘들아
-
수능 못 끊을 거 같음
-
수시도 지역 따라서는 못하기도 합니다 학군지에사는 전 강제 정시행 당했어요 고1내내...
-
설자전 가기 8
93 96 1 72 (물리..) 94(지구) 얼마나 올리면 되나요??
-
수학 기출 순서 0
제 동생이 예비고2인데,., 기출학습에 고민이 있더라고요 선행을 미리해놔서...
-
현재 국민대 인공지능학부 다니고 있고 2학년 26살임, 이제 3학년 이것만 해도...
-
연애 시작한 썰 (당시에 매우 설레는 일이었음, 세로드립 아님) 18
때는 24수능이 끝나고 원서도 넣은 1월달이었음. 당시에 썸타던 애와 수능 끝나고...
-
스카이가 너무 가고싶어서 찐막해보고 싶은데 사회나갔을때 삼수 나이갖고 디메릿이...
-
이거는 뭐가 문제임?? 10
문제푸는데 왜이렇게 시간이 오래걸리지 풀이가 긴편은 아니지않나 뇌가 느린가...
-
68X까지 뚫리는 건 확정인 듯!
-
ㅇㅈ 3
덕코 55555ㅇㅈ
-
이거 인원제한있나요?
-
나머지 37% 빨리 들어오라고
첫번째 댓글의 주인공이 되어보세요.