연결 리스트란 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식이다.



Ⅰ. 연결 리스트의 구성 



연결 리스트는 노드로 이루어져 있다. 노드란 자료 하나를 담고있는 것을 말한다.


노드는 자기 자신의 값과 다음 노드를 가리키는 노드 포인터로 구성된다.

( 처음 부분의 노드를 Head 마지막 부분의 노드를 Tail 이라고 한다 )


아래 그림들의 연보라 색과 하늘색과 같이 각 노드는 값을 가지고 그 옆에 다음 노드로 가는 주소값을 가져 서로 연결되게 된다.( 연보라 부분이 값을 담는 부분, 하늘색 부분이 다음 노드로 넘어가는 주소 부분이다)


노드를 연결한 방법에 따라 단순 연결 리스트, 이중 연결 리스트, 원형 연결 리스트로 구분된다.



  ① 단순 연결 리스트



위의 그림과 같이 각 노드에 자료 공간과 한 개의 포인터 공간이 있고, 각 노드의 포인터는 다음 노드를 가리킨다.




② 이중 연결 리스트



위의 그림과 같이 단순 연결 리스트와 비슷하지만, 포인터 공간이  앞과 뒷 부분에 2개가 있어 

각각의 포인터는 앞의 노드와 뒤의 노드를 가리킨다.


③ 원형 연결 리스트 



위의 그림과 같이 일반적인 연결 리스트에 마지막 노드와 처음 노드를 연결시켜 원형으로 만든 구조 이다.




Ⅱ. 링크드 리스트 구현 


#include <stdio.h>

#include <stdlib.h>


typedef struct member

{

    char name[20];

    int age;

    struct node *NEXT;

}MEM;


int main(void)

{

    int nop=0,i;

    printf("사람은  명입니까? : ");

    scanf("%d",&nop);

    MEM* name=(MEM*)malloc(sizeof(MEM));

    MEM* age=(MEM*)malloc(sizeof(MEM));

    

    for(i=0;i<nop;i++)

    {

        printf("%d번째 사람의 이름은? : ",i+1);

        scanf("%s",name[i].name);

        printf("%d번째 사람의 나이는? : ",i+1);

        scanf("%d",&age->age);

        printf("\n\n\n이름 : %s\n나이: %d\n\n\n",name[i].name,age->age);

    }

 

}

'Programming > C' 카테고리의 다른 글

[ Project ] Wild!  (0) 2015.08.27
[ Project ] Stack_Linked List  (0) 2015.08.27
구조체 ( Struct )  (0) 2015.08.27
Stack과 Queue  (0) 2015.08.26
Call-by-value 와 Call-by-reference  (0) 2015.08.26