반응형








Linked List란 다음 그림과 같은 구조로 포인터를 이용하여 List를 만들어 내는 것이다.


즉 데이터와 link를 이용하여 하나의 배열 형태로 이루어 져 있지만 실제로는 List형태로 연결되어 있는 것이다.



List를 사용하면 Array를 이용할 때 정적인 방법으로 코드 작성시에 Array 사이즈를 지정해 주던것을 동적인 방법으로 만들어 줄 수 있고,


구조체의 내용에 따라 다양한 data를 이용하여 List를 만들어 낼 수 있다.



위의 구조대로 node를 만들어 낸다면 구조체의 선언을 위와 같이 해주면 되고, 만약에 int형 data말고도 추가적으로 더 넣고 싶은게 있다면


구조체에 넣어주기만 하면 된다. 그렇게 되면 node 타입의 노드들이 List형태로 연결되는 자료구조를 만들어 낼 수 있다.


삽입시에도 원하는 노드 다음노드에 포인터를 연결해 주면 되고, 삭제시에도 원하는 노드에 연결되어 있는 포인터를


그다음 노드로 연결시켜주면 된다.




그렇다면 기본적인 Linked List를 생성하는 코드를 보도록 하겠다.


코드는 파일로 저장되어있는 20개의 정수를 읽어와 Linked List로 연결하는 프로그램 이다.



List를 생성할 때에는 기본적으로 두가지 기능을 할 수 있는 함수를 만들어 주었는데


하나는 새로운 노드를 생성하는 함수, 그리고 하나는 생성된 노드를 원하는 List의 마지막 노드에 연결시키는 함수 이다.


동적할당인 malloc을 이용해서 node* type의 메모리를 allocation해주고, 초기 data는 0, next link는 Null로 초기화 시켜준다.

 

파라미터로 받아오는 새로운 node 주소와 header 주소를 이용해서 header에 연결된 노드들의 제일 마지막 노드를 찾고, 새로운 노드를 연결시켜준다.


다음과 같은 두개의 함수를 이용해서 만들어 주었다.






main함수 내에서 node* 형식의 변수를 하나 만들어 주고 그 포인터변수에 makeLL() 함수를 붙여 주었다.


makeLL() 함수 내에서는 fscanf()를 통해 파일로 부터 정수를 읽어오고, 매번 newnode()와 LinkNode() 를 Call하는것을 볼 수 있다.


파일에서 읽어온 정수인 buf를 파라미터로 넘겨 새로운 노드를 생성하고, 생성된 노드를 header 포인터 정보와 함께 넘겨


제일 마지막에 연결시키는 구조이다.



반응형

+ Recent posts