• 스택 기본 구조



-스택은 입출력이 한방향으로 이루어 진다(자료를 입력하는 쪽과 출력하는 쪽이 같다).

-늦게 들어온 자료가 더 빨리 나가는 구조(LIFO : Last in First out).

-일반적으로 스텍에서 입력을 Push, 출력을 Pop이라고 한다.






현실에서 LIFO의 예



  • 스택의 삽입(Push)

-스택의 삽입은 가장 앞쪽에서 이루어 진다.


-위 그림에서 Head노드는 데이터는 갖지 않고, 첫번째 노드의 위치를 저장하는 노드다

(Head노드에도 데이터를 저장한다면, 삽입 노드가 Head노드가 되게하면 된다).



Head노드의 다음노드(Next) = 삽입노드

삽입 노드의 다음노드(Next) = 노드#01(첫번째 데이터 노드)




삽입 완료





  • 스택의 출력(Pop)



출력(Pop) 요청시 첫번째 노드를 출력




Head노드의 다음노드(Next)를 2번째 노드(출력 노드의 Next)로 지정

( = 2번째 노드를 첫번째 노드로 만듬)



데이터 전달 & 노드를 삭제를 완료하면

출력 종료




  • 전체 코드




  • 템플릿으로 구현한 스택


'자료구조' 카테고리의 다른 글

트리 순회 알고리즘#01 전위 순회(Preorder Traversal)  (0) 2017.01.23
이진 트리(Binary Tree)  (0) 2017.01.23
큐(Queue)  (0) 2017.01.22
이중 링크드 리스트(Doubly Linked List)  (1) 2017.01.20
링크드 리스트(Linked List)  (0) 2017.01.20









  • 이중 링크드 리스트 기본 구조


-노드는 정보(Data) & 다음 노드(Next)가 누구인지  & 이전 노드가(Prev) 누구인지 저장하고 있다.


-제일 앞의 노드(Head)와 제일 뒤의 노드(End)를 연결 시키면 원형 링크드 리스트가 된다.



  • 단일 링크드 리스트와의 차이

-이중 링크드 리스트는 전 노드에 접근 가능하다는 장점이 있다.



  • 이중 링크드 리스트 삽입


삽입할 노드가 들어갈 위치를 찾고,



노드#01의 다음노드(Next) = 삽입노드

삽입 노드의 전 노드(Prev) = 노드#01



삽입 노드의 다음노드(Next) = 노드#02

노드#02의 전 노드(Prev) = 삽입노드




삽입 종료


  • 이중 링크드 리스트 삭제
이중 링크드 리스트의 삭제는

삭제할 노드의 앞뒤를 연결 시킨 후, 삭제할 노드를 삭제하면 된다.

단일 링크드 리스트와 다른 점이라면, 뒷노드의 Prev(전 노드)도 신경 써야 한다는 점이다.



삭제할 노드를 찾고,




삭제할 노드의 앞노드(삭제 노드의 Prev) : 노드#01

삭제할 노드의 다음 노드(삭제 노드의 Next) : 노드#02


[노드#01과 노드#02를 연결]

노드#01의 다음 노드(Next) = 노드#02

노드#02의 전 노드(Prev) = 노드#01



앞뒤 노드 연결이 완료되면,

노드를 삭제하면 된다.


  • 전체 코드



'자료구조' 카테고리의 다른 글

트리 순회 알고리즘#01 전위 순회(Preorder Traversal)  (0) 2017.01.23
이진 트리(Binary Tree)  (0) 2017.01.23
큐(Queue)  (0) 2017.01.22
스택(Stack)  (0) 2017.01.21
링크드 리스트(Linked List)  (0) 2017.01.20









  • 링크드 리스트 기본 구조



-노드는 정보(Data) & 다음 노드(Next)가 누구인지 저장하고 있다.


-링크드 리스트는 자료를 검색할때 앞에서 순차적으로 검색한다.


-Head노드와 End노드는 Data를 저장하지 않는 형식으로 구현(이건 편의상 이렇게 한것, 크게 상관은 없다).




  • 링크드 리스트 삽입

삽입할 데이터가 들어갈 위치를 찾고,




노드#01(앞 자리의 노드) 의 다음노드(Next) = 삽입노드

삽입 노드의 다음노드(Next) = 노드#02(뒷자리 노드)





삽입 종료


결론적으로 삽입한 노드의 뒷노드 들이 한칸씩 밀리게 된다.




  • 링크드 리스트 삭제

삭제할 노드를 찾고,




삭제할 노드의 전 노드(노드#01)의 다음노드(Next)를
삭제할 노드의 다음노드(삭제 노드의 Next)로 설정



그 후에 삭제할 노드를 삭제


삽입과 반대로, 삽입한 노드의 뒷노드 들이 한칸식 앞으로 당겨지게 된다.



  • 전체 코드



'자료구조' 카테고리의 다른 글

트리 순회 알고리즘#01 전위 순회(Preorder Traversal)  (0) 2017.01.23
이진 트리(Binary Tree)  (0) 2017.01.23
큐(Queue)  (0) 2017.01.22
스택(Stack)  (0) 2017.01.21
이중 링크드 리스트(Doubly Linked List)  (1) 2017.01.20

+ Recent posts