컴공일기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를 선물하세요.
-
단 한번만이라도 내 모든 걸 다 바쳐서 후회없이 공부하고 싶다. 근데 그게 안돼....
-
그냥 빛을 쏘면 추력이 생기는거 아님? 그니까 우주공간에 손전등 켜둔채로 놔두면...
-
남자가 연분홍색 옷(or모자)입으면 안된다 그렇게 진한색도 아닌데 남자도 연분홍...
-
崔대행 "부동산 상황 엄중…규제·금융 총동원해 집값 상승 차단" 15
(세종=뉴스1) 전민 기자 = 최상목 대통령 권한대행 부총리 겸 기획재정부 장관은...
-
8:40~4:37분까지의 시간동안 집중할수가 없을듯 작년에 ㄹㅇ 어케 버틴거지 ㄷㄷ
-
나다 싶으면 다시 팔로우 해주세요
-
1. 왜 세상은 븅갓같은가 2. 왜 븅갓같은걸 고치지 않는가(븅갓이라서) 즉,...
-
수학 공통 수학 미적 수학 기하 지구과학1 의 난이도가 궁금합니다.
-
작수 46625 화,미,지1,생2 집안 사정 때문에 공부 놨다가 초등학교 공부시작한...
-
한국수력원자력이 네덜란드 원전 수출 수주전에 참여하지 않는다. 19일 원전업계에...
-
3덮국어 1
81이면 3뜨나 문학에서 우르르쾅쾅 틀림
-
똥 다쌌다 0
개운하내
-
언매 83 미적 100 영어 78 화학 47 생명 37 생명을 바꿔서 점수가 이모양이네요 ㅠㅠ
-
조선대 의대 휴학원 반려…"이달 복귀 안 하면 전원 제적" 2
"학칙 엄격히 적용"…전남대도 '제적 학칙' 적용 방침 (광주=연합뉴스) 여운창...
-
제가 어릴때 생각했던 emdrive 원리임..
-
어케 바꿈? 이어폰 뺏는데도 씹덕 노래 흘러나와서 쪽팔림
-
더 이상 특례는 없다…의대생 미복귀시 편입학 충원 검토 3
[서울=뉴시스] 구무서 기자 = 정부가 의대 모집 인원 3058명 조정을 내걸었지만...
-
더프 국어... 1
쉬웠다는데 89점ㅠ 인문지문 보기만 맞췄으면 90점 넘었을텐데 작수랑 똑같이...
-
요즘은 설의,울산의 정시로 동시에 붙는 사람 없나 10
그럼 이제 이런 것도 못 보겠네 제목: 합격인증) 너와 나의 연결고리 내용: 이건...
-
공수2 선행.. 인강 추천해주실 수 있나요?
-
고대학우 0
고대학우 병결많이 본다는데 사실인가뇨..저 병결병조퇴다 합해서 거의 10일이...
-
오랜만에 수학 풀어보니 되게 막히네요,, 아직 패스살 돈 없어서 한완수로 감...
-
구해서 풀어봤는데 더프치고 되게 쉽네요. 아무래도 작수 반영이라 그런가봐요....
-
다음생은 AI로 0
-
지피티에게 열등감 느끼는데 AI <- 얘가 나보다 훨씬 똑똑함
-
교육과정이 문제임 과학이 아니라 산수를 시키고 있어
-
주위 반응 어땠을까 ㅈㄴ재밌었을듯ㅋㅋㅋㅋㅋ
-
제곱햇는데 왜 내적이 나오죠? 우진씨가 증명 안해주고 그냥 이거라는데 흐 ㅁ흠。
-
이런 분들이 너무 많아서 한번 말씀은 드려야 할 것 같아요 제가 공부법 질문,...
-
코일에에 전자가 흐르면 한 지점의 전자의 반대쪽은 전류가 반대로 흐르는걸로 보이잖음...
-
나도 수능 잘봤다고
-
원문과 프로그램에 대한 자세한 사항은 아래에서 볼 수 있습니다. :...
-
왜냐하면 지구에 소행성이 떨어지면 충격에 의한 에너지가 발생하는데 블랙홀이 태양을...
-
이창무 샘 스타일이 제일 맘에 들던데 김범준 샘이 엄청 잘나가시더라구요 두 분이...
-
퇴근완료 4
자야지
-
원하는 직업 특성상 대학은 그렇게까지 중요하지 않은편인데 웬만하면 수도권은 가고 싶어서
-
상자의 부피를 점점 줄이면서 결국 공의 크기에 꼭맞게 상자가 줄어들면 공의 에너지는 어디로감?
-
기상 기상 2
오늘 하루도 춥네요 파이팅
-
그러하다
-
탱크 ‘설’을 아십니까? -1990년대 이전, 기자들의 한자 표현 방식 2
***상꼰대의 옛 이야기입니다. 입시 사이트에는 맞지 않을 수도 있는. 하지만,...
-
확통 2025 수능 기준으로 확통에서만 2개 나갔는데 확통푼게 개념원리 쎈b 너기출...
-
개똥같네 진짜 평가원스럽게 내라고 좀
-
검은 구슬 구분하는거 안하는거 답 다르게 나옵니다. 근데 통통이들중에 이런거...
-
현재 미적 2-4틀인데 10
고정2틀 만드는 시간이랑 확통노베에서 첨시작해서 만점 만드는거중에 뭐가 더 빠른가요
-
이젠 이런 것도 나오네 선물로도 돈 은근 깨지는듯 (가난한대학생관점) 사회생활은 어려워요.
-
웬만해서는... 전적대 간 계기가 수능 ㅈ망해서 과 낮춰쓴거였는데 그때 배웠던 걸로...
-
3덮 언매 2
93이면 무보 3은 줌?? 실수 조까치 했는데 주변에 국어 고자친구들도 다 7...
-
과탐 뭐할까요 2
작수 화학 47받고 올해 지구로 틀었는데 개념 1회독 돌리고 더프 보니 20점대...
-
아니 이거 뭐지 진짜 병인가

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