Taking baby-developer steps

2022.04.10. push_swap 스택구현-1 본문

Logs/학습 log

2022.04.10. push_swap 스택구현-1

Surin Lee 2022. 4. 10. 09:38

 

스택 관련 기본 연산(push, pop=> 각각 front, back 모두)을 구현 하면서, 원래는 unsigined int 형 index값과 int형 contents 값을 파라미터로 받아서 그때마다 new node를 만들고 free 해가면서 사용하려고 했는데, 오히려 번거로워질거 같아서, pop 연산에서 node를 반환하고 그 노드를 push 연산에서 그대로 받아서 사용하기로 했다. => 이번에 만들 프로그램에서는 한번 입력 값이 다 들어오고 나서는 따로 추가될 노드(데이터)가 없기 때문.

따라서 각각의 연산관련 함수의 프로토 타입이 위와 같이 변경되었다.(new_top, new_back의 자료형은 오타이다. 현재는 t_node형으로 변경 됨)

push_front 작동 구상

push_back 작동 구상

 

pop_front 작동 구상

 

pop_back 작동 구상

--구상 대로 push, pop 함수 4개 구현 완료.

+ t_stack 정의시 top_index도 따로 정의했기 때문에, push_front와 pop_front의 경우, top_index를 top 노드의 indexing된 값으로 저장되도록 조치해놨다.

+ 생각해보니 pop_back에서도 리스트내 노드가 하나뿐일 때 pop하는 경우에는 top_index를 변경해야해서 그 부분도 추가했다.

stack의 push, pop 동작이 잘 작동 되는지 stack_main.c 파일을 작성해 확인해 보았다.

push_fornt, push_back을 이용해 스택 a, b에 각각 content 및 index가 들어간 모습

이후 메인 문에 pa, pb 명령처럼 동작할 수 있도록 pop_front 명령을 내렸는데,

의도한 것은 a_stack의 top을 pop_front로 추출해서 b_stack의 bottom으로 push_back으로 넣으려고 했는데, push_back은 잘 됬는데, pop_front시에 문제가 있는것 같다. 아마도 head가 가리키는 노드가 변하지 않은거 같은데 한번 확인해 봐야겠다.

Comments