노드

2022. 12. 6. 01:37개인공부/C++

노드

가변배열 강의를 듣고 다음으로는 노드 구조를 구현하였다.

리스트.h 헤더파일에 노드와 리스트 구조체를 설계하였다.

메모리 공간을 만들어줄 릴리즈 함수와 메모리 공간을 해제할 exit 함수는 리스트의 시작주소만 

알면 되기 때문에 list* 값만 받았다.

 

이 노드의 구조는 list 구조체의 count 를 통해서 길이를 확인 가능하고 이후에 노드들은 

다음 노드들의 주소와 저장 int값을 가지고 있다.

이를 통해서 첫번째 시작주소만 알고 있으면 마지막 노드까지 찾아갈 수 있다.

다음으로는 릴리즈 함수를 구현하였다 시작은 아무런 값을 가지지 않기 때문에 firstNode 에 nullptr을 가지고

count도 0이다.

 

다음으로 새로운 값을 가지는 노드를 만들고 현재 마지막 위치에있는 노드의 NextNode값에

새로운 노드의 주소를 넣는 함수이다.

 

PushFront 함수는 처음구현할때 가변배열처럼 생각을 해서 모든 저장값을 다음칸으로 미룬다는 식으로

코드를 설계하고 있었는데 그럴필요없이 시작노드를 새로운 노드로 새로운 노드의 다음 노드주소를 원래

시작노드값으로 바꾸면 빠르게 작성이 가능하였다.

 

이를통해서 각각의 자료구조마다 장점과 약점을 가진다는 것을 알게되었다.

위와같이 노드를 이용하면 배열의 첫번째에 값을 집어넣을때 간단하게 1번만 실행하면 끝이지만

마지막 배열의 경우에는 배열의 길이가 길어질수록 연산속도가 배열의 길이만큼 증가한다.

이러한 것을 표현한것이 시간복잡도인데 자료구조에서 중요한 요소이다. 

시작복잡도와 메모리복잡도가 있으며 이는 나중에 공부해서 더 자세한 내용을 숙지할 것이다.

 

그리고 마지막으로 힙메모리를 해제하는 함수를 통해서 힙버퍼를 방지한다.

이런식의 c스타일의 노드, 가변배열을 구현하였는데

다음 공부로는 c++의 클래스 개념을 배우면서 왜 c++이 더 편리한지 이해하고 싶다.

'개인공부 > C++' 카테고리의 다른 글

class(2)  (0) 2022.12.06
class (1)  (0) 2022.12.06
병합 , 퀵 정렬  (0) 2022.12.04
정렬 알고리즘  (0) 2022.12.03
구조체, 동적할당  (0) 2022.12.03