์ฝ”๋”ฉํ…Œ์ŠคํŠธ/์ž๋ฃŒ๊ตฌ์กฐ

[C++ ์ž๋ฃŒ๊ตฌ์กฐ] ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Singly Linked List) - ๊ธฐ๋ณธ

kite707 2021. 3. 4.

 

https://thewayaboutme.tistory.com/91

 

c++ singly linked list ๋‹จ์ผ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„

* ๋ณธ๋ฌธ์€ (๋ฒ”ํ•œ์„œ์ ์ฃผ์‹ํšŒ์‚ฌ, 2013)์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ–ฅํ›„ ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐ ์ž๋ฃŒ๊ตฌ์กฐ ์ˆ˜์—…์„ ๋“ค์œผ๋ฉฐ ์ •ํ™•ํ•œ + ์ตœ์‹  ๋‚ด์šฉ ์ดํ•ด๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ๋ณด์™„ํ•ด ๋‚˜๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 1. ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€

thewayaboutme.tistory.com

์ด ๊ธ€์€ ์œ„ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ’๋“ค์„ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์€ ์•„๋งˆ ๋ฐฐ์—ด(Array)์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ์ค‘๊ฐ„์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ๊ฐ’์„ ์‚ฝ์ž…ํ•  ๋•Œ ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ด๋‹ค. 

๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์—ฌ๊ธฐ์„œ 22๋ฅผ ์‚ญ์ œํ•˜๋ ค ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด 22๋ฅผ ์ง€์šด ๋’ค

๋’ค์— ์žˆ๋Š” ์›์†Œ๋“ค์„ ๋ชจ๋‘ ์•ž์œผ๋กœ ํ•œ์นธ์”ฉ ์˜ฎ๊ฒจ์ค˜์•ผ ํ•œ๋‹ค.

์ฆ‰ ์›์†Œ๊ฐ€ n๊ฐœ๋ผ๋ฉด ์œ„์—์„œ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด ๋œ๋‹ค. (์‚ฝ์ž…์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€) 

์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ๋‹ค๋ฃฐ ๊ฒƒ์ด๋‹ค.

 

 

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Singly Linked List)๋ž€?

 

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋ชจ๋“  ์›์†Œ(element)๊ฐ€ ๋ฐ์ดํ„ฐ, ๋งํฌ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ด ๋งํฌ(์˜ˆ๋ฅผ๋“ค์–ด ํฌ์ธํ„ฐ)๋ฅผ ํ†ตํ•ด ๋’ค ์›์†Œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ ์›์†Œ๋Š” '๋…ธ๋“œ'๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์œ„์—์„œ ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋งํฌ(ํฌ์ธํ„ฐ)๋ฅผ ํ†ตํ•ด ๋’ค ์›์†Œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์กฐ๋ผ๊ณ  ํ•˜์˜€๋‹ค. ์ฆ‰ ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน๋ณ„ํžˆ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋Š” 'head', ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋Š” 'tail'์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ(tail)์€ NULL๊ฐ’์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

 

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„(C++)

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” C++๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค.

class StringNode { 
private:
	string elem; //์›์†Œ์˜ ๊ฐ’
	StringNode* next; //๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
	friend class StringLinkedList; //StringLinkedList์˜ private์›์†Œ ์ ‘๊ทผ๊ฐ€๋Šฅ
};

StringLinkedList๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

class StringLinkedList {
public:
	StringLinkedList(); //๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
	~StringLinkedList();
	bool empty()const; //๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
	const string& front()const;  //์ฒซ๋ฒˆ์งธ ์›์†Œ return
	void addFront(const string& e); //๋งจ ์•ž์— ์›์†Œ ์ถ”๊ฐ€
	void removeFront(); //๋งจ ์•ž ์›์†Œ ์ œ๊ฑฐ
private:
	StringNode* head;
};

์ด์ œ StringLinkedList์˜ ๊ฐ ํ•จ์ˆ˜๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํ˜„ํ•ด ๋ณด์ž.

 

๋จผ์ € ์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž์ด๋‹ค. ๊ฐ๊ฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค.

StringLinkedList::StringLinkedList()
	:head(NULL){} //์ฆ‰ head==NULL์ด๋ฉด ๋นˆ ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
    
StringLinkedList::~StringLinkedList() { while (!empty())removeFront(); }
//emptyํ•จ์ˆ˜๊ฐ€ true๋ฅผ ๋ฆฌํ„ดํ•  ๋•Œ ๊นŒ์ง€  removeFrontํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์ด์ œ ์œ„์—์„œ ์‚ฌ์šฉํ•œ empty ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด์ž. head==NULL์ด๋ฉด ๋นˆ ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ์ ์„ ์ด์šฉํ•œ๋‹ค.

bool StringLinkedList::empty()const {
	return head == NULL;
}

์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” frontํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค.

const string& StringLinkedList::front()const { return head->elem; }

์—ฌ๊ธฐ์„œ .์ด ์•„๋‹Œ ->๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ด๋Š” head ๊ฐ€ ํฌ์ธํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (StringNode* head;)

.    : ์•ž์— ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ ๊ฒƒ(๋ณ€์ˆ˜์™€ ๊ฐ™์€)์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
-> : ์•ž์— ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ

 

addFrontํ•จ์ˆ˜์˜ ๊ตฌํ˜„

 

์ด์ œ addFrontํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๋„๋ก ํ•˜์ž. ๋งจ ์•ž์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ ์„ธ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

  1. ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ƒ์„ฑ(๋™์ ํ• ๋‹น)
  2. ์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ next(ํฌ์ธํ„ฐ)๊ฐ€ ํ˜„์žฌ head๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ
  3. head๋ณ€์ˆ˜๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ๋”์šฑ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ƒ์„ฑ

2. ์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ next(ํฌ์ธํ„ฐ)๊ฐ€ ํ˜„์žฌ head๊ฐ’(ํŒŒ๋ž‘์ƒ‰ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ)์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ

3. head๋ณ€์ˆ˜๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ

์ด์ œ ์œ„์—์„œ ํ•œ ์„ธ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

void StringLinkedList::addFront(const string& e) { //e๋Š” ์ƒˆ๋กœ ๋„ฃ์„ ๊ฐ’(๋„ฃ๊ณ ์ž ํ•˜๋Š” ๊ฐ’)
	StringNode* v = new StringNode; //1. ๋™์ ํ• ๋‹น์œผ๋กœ  ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ƒ์„ฑ
	v->elem = e;  //์ƒˆ๋กœ์šด ๋…ธ๋“œ์— ๊ฐ’ ๋„ฃ๊ธฐ
	v->next = head; //2. ์ƒˆ๋กœ ๋งŒ๋“  ๋…ธ๋“œ๊ฐ€ head๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ
	head = v; //3. head๊ฐ€ ์ƒˆ๋กœ ๋งŒ๋“  ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ
}

 

removeFrontํ•จ์ˆ˜์˜ ๊ตฌํ˜„

์ด์ œ ๋งจ ์•ž ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” removeFrontํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜์ž. ์‚ญ์ œ์˜ ๊ฒฝ์šฐ ๋”์šฑ ๊ฐ„๋‹จํ•˜๋‹ค. ๋งŒ์•ฝ ์•ž์—์„œ ์ถ”๊ฐ€ํ•œ ์ฃผํ™ฉ์ƒ‰ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

์ดˆ๊ธฐ ์ƒํƒœ

 

๋งจ ์•ž ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ์„ธ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

  1. head์˜ ๊ฐ’์„ ์ž„์‹œ ๋ณ€์ˆ˜(์ผ๋ฐ˜์ ์œผ๋กœ old์‚ฌ์šฉ)์— ์ €์žฅ
  2. head์˜ ๊ฐ’์„ old์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ๋ณ€๊ฒฝ(head๊ฐ€ ๋‘๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ)
  3. old ์‚ญ์ œ

์ด ๊ณผ์ • ์—ญ์‹œ ๊ทธ๋ฆผ์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

 

1. head์˜ ๊ฐ’์„ ์ž„์‹œ๋ณ€์ˆ˜ old์— ์ €์žฅ(์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” old๋ณ€์ˆ˜ ์ƒ์„ฑ)

2. head์˜ ๊ฐ’์„ old์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ๋ณ€๊ฒฝ(head๊ฐ€ ๋‘๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ)

3. old์‚ญ์ œ

์œ„ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

void StringLinkedList::removeFront() {
	StringNode* old = head; //1. head์˜ ๊ฐ’์„ ์ž„์‹œ๋ณ€์ˆ˜ old์— ์ €์žฅ(์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” old๋ณ€์ˆ˜ ์ƒ์„ฑ)
	head = old->next; //2. head์˜ ๊ฐ’์„ old์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ๋ณ€๊ฒฝ(head๊ฐ€ ๋‘๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ)
	delete old; //3. old์‚ญ์ œ
}

 

์ด์ •๋ฆฌ

 

์œ„์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์„ ๋ชจ๋‘ ๋ชจ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.

#include <iostream>
#include <string>
using namespace std;

class StringNode { 
private:
	string elem; //์›์†Œ์˜ ๊ฐ’
	StringNode* next; //๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
	friend class StringLinkedList; //StringLinkedList์˜ private์›์†Œ ์ ‘๊ทผ๊ฐ€๋Šฅ
};

class StringLinkedList {
public:
	StringLinkedList(); //๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
	~StringLinkedList();
	bool empty()const; //๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
	const string& front()const;  //์ฒซ๋ฒˆ์งธ ์›์†Œ return
	void addFront(const string& e); //๋งจ ์•ž์— ์›์†Œ ์ถ”๊ฐ€
	void removeFront(); //๋งจ ์•ž ์›์†Œ ์ œ๊ฑฐ
private:
	StringNode* head;
};

StringLinkedList::StringLinkedList()
	:head(NULL) {} //์ฆ‰ head==NULL์ด๋ฉด ๋นˆ ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

StringLinkedList::~StringLinkedList() { while (!empty())removeFront(); }
//emptyํ•จ์ˆ˜๊ฐ€ true๋ฅผ ๋ฆฌํ„ดํ•  ๋•Œ ๊นŒ์ง€  removeFrontํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.


bool StringLinkedList::empty()const {
	return head == NULL;
}

const string& StringLinkedList::front()const { return head->elem; }

void StringLinkedList::addFront(const string& e) { //e๋Š” ์ƒˆ๋กœ ๋„ฃ์„ ๊ฐ’(๋„ฃ๊ณ ์ž ํ•˜๋Š” ๊ฐ’)
	StringNode* v = new StringNode; //1. ๋™์ ํ• ๋‹น์œผ๋กœ  ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ƒ์„ฑ
	v->elem = e;  //์ƒˆ๋กœ์šด ๋…ธ๋“œ์— ๊ฐ’ ๋„ฃ๊ธฐ
	v->next = head; //2. ์ƒˆ๋กœ ๋งŒ๋“  ๋…ธ๋“œ๊ฐ€ head๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ
	head = v; //3. head๊ฐ€ ์ƒˆ๋กœ ๋งŒ๋“  ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ
}

void StringLinkedList::removeFront() {
	StringNode* old = head; //1. head์˜ ๊ฐ’์„ ์ž„์‹œ๋ณ€์ˆ˜ old์— ์ €์žฅ(์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” old๋ณ€์ˆ˜ ์ƒ์„ฑ)
	head = old->next; //2. head์˜ ๊ฐ’์„ old์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ๋ณ€๊ฒฝ(head๊ฐ€ ๋‘๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ)
	delete old; //3. old์‚ญ์ œ
}

 

์•ž์—์„œ ๋ฐฐ์—ด์€ ์›์†Œ์˜ ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ ๋ฐ”๊ฐ€ ์žˆ๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์›์†Œ๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ด๋‹ค. ํ•˜์ง€๋งŒ ํŠน์ • ์›์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.(์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ) ๋”ฐ๋ผ์„œ ํŠน์ • ์›์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๊ณ , ์›์†Œ์˜ ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.

๋Œ“๊ธ€