[push_swap] Day 02. Double Linked List 만들기

jkeum·2021년 5월 22일
3

push-swap

목록 보기
2/10
post-thumbnail

이중 연결 리스트 구조체 생성

스택은 이중 연결 리스트(Double Linked List)로 만들었다.
t_node 구조체 안에는 값을 담고 있는 int형 변수 value가 있고, 이전 노드와 다음 노드에 연결하는 t_node형 변수 prevnext가 있다.

구조체

typedef struct s_node	t_node;
struct	s_node
{
	int	value;
	t_node	*prev;
	t_node	*next;
};

일단은 이렇게만 작성했고, 코드를 더 작성하다가 필요한 게 생기면 추가하려고 한다.


리스트 전체를 가리키는 구조체 생성

스택 전체를 가리키는 구조체를 새로 만들었다.

리스트를 가리킨다는 의미에서 변수명을 t_listp라고 지었는데 좀 별로다.
위에서 숫자 하나를 담는 노드를 t_node라고 지어서 여기를 t_stack으로 바꿨다.
아무튼 이 구조체 안에는 스택에 몇 개가 들어있는지를 저장하는 int형 변수size가 있고, 스택의 top과 bottom을 가리키는 t_stack형 변수 topbottom이 있다.

구조체

typedef struct s_stack	t_stack;
struct s_stack
{
	int	size;
	t_node	*top;
	t_node	*bottom;
};

rotate나 reverse rotate 같은 기능들을 구현해야 해서 원형리스트로 한다?는 말도 들었는데 그거보다 이게 편할 것 같아서 이렇게 했다. 맨 앞과 맨 끝의 value를 바꿔주기만 하면 되니까 이렇게 작성해서 사용해도 충분할 것 같다.


스택 생성

init_stack.c 를 만들었다.

main()에 들어온 문자열 인자들을 넘겨줘서 각 노드마다 문자열을 숫자로 변환한 value를 담아준다. 그리고 prevnext를 잘 연결해서 이중 연결 리스트를 만든다.

분명 minishell에서도 이중 연결 리스트를 사용했고 그래서 초기화하고 값 넣어주고 앞뒤 잘 연결해주는 함수도 만들었었는데, 처음에 뭘 잘못 생각했는지 꼬였는지 이상하게 작성해서 값이 제대로 안 나왔다. 그래서 내 minishell 코드 보고 다시 작성했다. 바보인가 깡깡~!

테스트 결과

결과는 다음과 같이 잘 나온다.


마무리

리스트 생성하는 코드 짜다가 꼬여서 혼자 엥?엥?하다 결국 이전에 짰던 코드를 본 게 너무 창피해~! 생각을 하면서 코드를 짜자..

profile
It's me, jkeum!

0개의 댓글